Besoin d'une aide en java

Fermé
bifaka - 14 déc. 2005 à 08:57
 Nihad - 25 nov. 2014 à 10:10
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

HackTrack
Messages postés
618
Date d'inscription
vendredi 26 juillet 2002
Statut
Membre
Dernière intervention
13 juillet 2013
970
20 déc. 2005 à 08:43
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
merciiiii
0
philtrain
Messages postés
169
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
25 juillet 2010
73
14 déc. 2005 à 09:01
Bonjour,

Pourquoi ne pas utiliser la classe NumberFormatException?

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/NumberFormatException.html


Philippe.
0
Merci beaucoup phillipe mais je voulais savoir si avec ma méthode ca marhe.
0
jcodeunpeu
Messages postés
365
Date d'inscription
mercredi 9 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2006
6
14 déc. 2005 à 16:09
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
HackTrack
Messages postés
618
Date d'inscription
vendredi 26 juillet 2002
Statut
Membre
Dernière intervention
13 juillet 2013
970
15 déc. 2005 à 08:45
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
jcodeunpeu
Messages postés
365
Date d'inscription
mercredi 9 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2006
6
15 déc. 2005 à 20:52
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
jcodeunpeu
Messages postés
365
Date d'inscription
mercredi 9 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2006
6
15 déc. 2005 à 21:07
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
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
HackTrack
Messages postés
618
Date d'inscription
vendredi 26 juillet 2002
Statut
Membre
Dernière intervention
13 juillet 2013
970
16 déc. 2005 à 09:53
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
merci beaucoup hacktrack. Tu es un ange qui vole toujours à mon secours.
Bonne journée.
0
jcodeunpeu
Messages postés
365
Date d'inscription
mercredi 9 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2006
6
16 déc. 2005 à 19:55
et on sera toujours là pour les gens sympathiques comme bifika,
pas vrai HachTrack ... :))
0
C'est curieux qu'il n'y ai aucune proposition avec des expressions régulières.
0
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