Besoin d'une aide en java

bifaka -  
 Nihad -
Un bonjour à tous,
Je dois lire trois nombres Integer à partir du clavier. Mais l'utilisateur peut faire une erreurs et donne plutôt des nombres double ou float. mon problème est que le suivant: je dois écrire un algorithme qui en cas d'errueurs demanderas à l'utilisateur de donner un nombre integer aussi longtemps qu'un integer ne sera pas donner, il lui en demandera toujours. Je n'arrive pas à trouver l'algorithme qui me permet de comparer un integer et un double.
Voici ce que j'ai essayé de faire.

public static void main(String[] args) {

int n1,n2,n3;
do{
System.out.println("\n trois nombres Integer nombre ");
System.out.print("a: ");
n1 = Integer.parseInt(in.readLine());
System.out.print("b: ");
n2= Integer.parseInt(in.readLine());
System.out.print("c: ");
n3= Integer.parseInt(in.readLine());

if(n1!=Integer.parseInt(in.readLine()))
{

System.out.println("vous n'avez donné un nombre Integer: ");
System.out.println(" un nombre Integer nombre: ");
System.out.print("n1: ");
n1 = Integer.parseInt(in.readLine());
}

else
{
System.out.print("n1: ");
n1 = Integer.parseInt(in.readLine());
System.out.print("n2: ");
n2 = Integer.parseInt(in.readLine());
System.out.print("n3: ");
n3 = Integer.parseInt(in.readLine());
}

}while (n1==Integer.parseInt(in.readLine()) ||n2==Integer.parseInt(in.readLine())||n3==Integer.parseInt(in.readLine()));
}

Merci de vouloir bien m'aider et bonne journée à tous.

11 réponses

  1. Utilisateur anonyme
     
    A la demande générale: en utilisant les expressions régulières

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /*
     * Created on Dec 20, 2005
     *
     */
    
    public class IntFormatTester_2 {
    	private ArrayList inputs;
    	private BufferedReader in;
    
    	public IntFormatTester_2() {
    		super();
    		inputs = new ArrayList();
    		in = new BufferedReader(new InputStreamReader(System.in));
    	}
    
    	public void readInput() {
    		String line = "";
    
    		while (inputs.size() < 3) {
    			String message = "L'entrée est valide et a été enregistrée.";
    			try {
    				line = in.readLine();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    			if (isValidInt(line)) {
    				inputs.add(Integer.valueOf(line));
    			} else {
    				message = "L'entrée n'est pas valide. Veuillez entrer un entier valide";
    			}
    			System.out.println(message);
    		}
    		System.out.println("Le traitement continue...");
    	}
    
    	private boolean isValidInt(String toTest) {
    		Pattern p = Pattern.compile("(\\d)+");
    		Matcher m = p.matcher(toTest);
    		if (m.lookingAt() && m.start() == 0 && m.end() == (toTest.length()))
    			return true;
    		return false;
    	}
    
    	public static void main(String[] args) {
    		IntFormatTester_2 tester = new IntFormatTester_2();
    		tester.readInput();
    	}
    }
    

    ;-)
    HackTrack
    1
    1. Nihad
       
      merciiiii
      0
  2. bifaka
     
    Merci beaucoup phillipe mais je voulais savoir si avec ma méthode ca marhe.
    0
    1. jcodeunpeu Messages postés 308 Date d'inscription   Statut Membre 6
       
      salut bifaka,
      je ne crois pas non.
      tu ne gère pas les exceptions levés par la lecture du flux in ....
      d'ailleurs on ne sais pas comment tu l'instancie ... lors de l'appel de in.readLine(), ni NumberFormatException lors du parse ...
      de plus, dans la condition de sortie while tu demande de relire de nouvelles lignes en réaffectant les n...
      j'ai un petit prog sous la main mais qui utilise la méthode read(), çà te donnera une idée, mais c'est plus simple de lire la ligne complète...
      public class SaisieNombres {
        public SaisieNombres(int n) {		
        int [] N = new int [n];
        for(int i =0;i < N.length;i++) {
          String str = "";
          System.out.print("nombre " + (i + 1) + " : ");
          while(x != 10 ) {
            try {
              x = System.in.read();	//	lit les saisies
              //	réserve une possibilité de sortie
              if((char)x == 'q' || (char)x == 'Q') System.exit(0);
              if(x != 13 && x != 10)
                str += (char)x;
            }catch(IOException ioe) {/* Exception improbable	*/}
          }
          try {
            N[i] = Integer.parseInt(str);
          }catch(NumberFormatException nfe) {
            System.out.println("Entiers attendus, veuillez resaisir svp"); 
             i--;	//	reprend le chiffre précédent
          }
        }
        /*	Traitement du tableau de paramètres saisies	
      	System.out.println("Bravo vous avez saisie : ");
      	for(int i=0;i < N.length;i++) {
      	System.out.println("nombre " + (i + 1) + " : " + N[i]);
      	}
         */
        }// fin de constructeur
        public static void main (String [] arg) {
          if(arg == null || (arg != null && arg.length == 0)) { 
            System.out.println("spécifier combien de chiffres à saisir SVP");
            return;
          }else {
            try {
               int n = Integer.parseInt(arg[0]);
               System.out.println("Pour quitter à tous moments, saisir 'q'");
               System.out.println("Saisir " +n + " nombres entiers svp");
               new SaisieNombres(n);
             }catch(NumberFormatException nfe) {
               System.out.println("Saisie incorrecte, relancer le  programme");
            }
          }
        }// fin main
      }// fin classe
      

      A+
      0
  3. Utilisateur anonyme
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    
    public class IntFormatTester {
    	private ArrayList inputs;
    
    	private BufferedReader in;
    
    	public IntFormatTester() {
    		super();
    		inputs = new ArrayList();
    		in = new BufferedReader(new InputStreamReader(System.in));
    	}
    
    	public void readInput() {
    		String line = "";
    		while (inputs.size() < 3) {
    			try {
    				line = in.readLine();
    				Integer newInput = Integer.getInteger(line);
    				int i = Integer.valueOf(line).intValue();
    				inputs.add(newInput);
    				System.out.println("'" + line + "' is valid and has been stored");
    			} catch (IOException e) {
    				System.out.println("'" + line + "' is not an Integer");
    			} catch (NumberFormatException e) {
    				System.out.println("'" + line + "' is not an Integer");			
    			}finally {
    				continue;				
    			}
    		}
    		System.out.println("Your 3 inputs are now valid. Process will continue");
    	}
    
    	public static void main(String[] args) {
    		IntFormatTester tester = new IntFormatTester();
    		tester.readInput();
    	}
    }
    


    ;-)
    HackTrack
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. bifaka
     
    merci à jcodeunpeu et à hacktrack. jcodeunpeu peut tu revoir ton code, ca n'affiche rien. hacktrack peut tu commenter tes codes s'il te plait , je ne suis qu'une débutante en java. le code fonctionne 100% mais je n'y comprend rien. Quelqu'un de vous pourrait il completer le mien, je crois comme ca je pourrai mieux comprendre.

    Merci à vous et bonne journée.
    0
    1. jcodeunpeu Messages postés 308 Date d'inscription   Statut Membre 6
       
      re bifika,
      DE-SO-LE ...
      j'aurai peut-être pu le garder pour le premier avril celui-là ....
      non, en fait j'ai zappé une ligne en copiant et en enlevant les tabulations je crois :
      il suffit d'inserer : int x = 0; // instancie x pour que le compilateur soit d'accord ...
      d'ailleurs il a du te le dire, reste à placer cette ligne au bon endroit,
      à savoir entre le for(....) et le while(...) .... et çà marche, maintenant peux tu nous dire ce que tu dois faire avec ces nombres ?
      j'ajoute que pour lancer le programme en console, c'est :
      >java SaisieNombres 3 (3 ou le nombres que tu veux)
      A+
      0
  6. jcodeunpeu Messages postés 308 Date d'inscription   Statut Membre 6
     
    je revois un peu ton code pour te répondre :
    int n1,n2,n3; 
    boolean valid = false;
    do{ 
      try{
        System.out.println("\n trois nombres Integer nombre "); 
        System.out.print("a: "); 
         n1 = Integer.parseInt(in.readLine()); 
        System.out.print("b: "); 
         n2= Integer.parseInt(in.readLine()); 
        System.out.print("c: "); 
         n3= Integer.parseInt(in.readLine()); 
         valid = true;  // si cette ligne est lue, la saisie est correcte...
         // bascule la valeur pour sortir de do...while
    
      }catch(NumberFormatException nfe){
          System.out.println("vous n'avez donné un nombre Integer: "); 
           // le problème en faisant comme çà est qu'il faut tout resaisir,
           // même les saisie correcte : 
         
      }catch(Exception e){/* à voir */}
    
    
    }while ( ! valid);
    System.out.print("n1: " + n1); 
    System.out.print("n2: " + n2); 
    System.out.print("n3: " + n3); 
     

    A+
    0
    1. bifaka
       
      salut jcodeunpeu ,
      un grand merci . Pour ta pensée, je dirai plutôt : le réel n'est pas ce que l'on voit mais ce que l'on refuse de voir.
      Au fait je suis une débutante en java et j'essaye juste de m'exercer. Sans te mentir avec toi j'ai beaucoup appris et j'espèr epouvoir t'aider aussi.
      Bonne journée.
      0
  7. Utilisateur anonyme
     
    Tes désirs sont des ordres !

    ;-)

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    
    public class IntFormatTester {
    	private ArrayList inputs;
    
    	private BufferedReader in;
    
    	public IntFormatTester() {
    		super();
    		inputs = new ArrayList();
    		in = new BufferedReader(new InputStreamReader(System.in));
    	}
    
    	/**
    	 * Lit les entrées au clavier et les stocke dans une liste
    	 * tant que la liste ne contient pas 3 éléments.
    	 *
    	 */
    	public void readInput() {
    		String line = "";
    		//Tant que la liste ne contient pas 3 entrées
    		while (inputs.size() < 3) {
    			try {
    				// Lire une ligne				
    				line = in.readLine();
    				//	Essayer de transformer l'entrée clavier en Integer
    				Integer newInput = Integer.getInteger(line);
    				// si l'entrée n'est pas valide, une Exception survient et on va dans le "catch"
    				//On ajoute cette entrée valide dans la liste
    				int i = Integer.valueOf(line).intValue();
    				inputs.add(newInput);
    				//On avertit l'utilisateur que son entrée valide a bien été sauvegardée
    				System.out.println("'" + line + "' is valid and has been stored");
    			} catch (Exception e) {
    				// Entrée non valide = > Message d 'erreur System.out.println("'" + line + "' is not an Integer");
    				System.out.println("'" + line + "' is not a valid Integer");
    			} finally {
    				//Que l'entré soit valide ou non, on continue la boucle "while"
    				continue;
    			}
    		}
    
    		//On est sorti de la boucle car 3 entrées valides ont été trouvées
    		System.out.println("Your 3 inputs are now valid. Process will continue");
    		//Continuer ici le traitement...
    	}
    
    	public static void main(String[] args) {
    		IntFormatTester tester = new IntFormatTester();
    		tester.readInput();
    	}
    }
    
    


    J'ai un peu modifié le code, il est un rien plus court encore.

    ;-)
    HackTrack
    0
  8. bifaka
     
    merci beaucoup hacktrack. Tu es un ange qui vole toujours à mon secours.
    Bonne journée.
    0
  9. jcodeunpeu Messages postés 308 Date d'inscription   Statut Membre 6
     
    et on sera toujours là pour les gens sympathiques comme bifika,
    pas vrai HachTrack ... :))
    0
  10. jj
     
    C'est curieux qu'il n'y ai aucune proposition avec des expressions régulières.
    0
  11. bifaka
     
    tu es un ange qui vient de me faire un beau cadeau de noel. T'es cool mec
    je te souhaite de bonnes fêtes
    0