Number format exception

Zabou -  
 Zabou -
Bonjour à tous :)

Je débute en java, et je viens d'effectuer un exercice sur la boucle WHILE
Après avoir effectué mon codage :

package classeouverte;


public class WhileUn {
 public static void main (String [] param) throws java.io.IOException  {
  
 
  String tmp = " ";
  char C = '\0';
  
  int valeur;
  
  System.out.print("Entrez des chiffres et appuyez sur  ");
  System.out.println("La touche Entrée, pour valider la saisie :  ");

  
  
  
  while (C != '\n') 
   {
   
   C = (char) System.in.read();
   if (C != '\n') tmp = tmp + C;
    
  }
  
  System.out.println("Vous avez entré : " + tmp);
  valeur = Integer.parseInt(tmp);
  System.out.println("C'est à dire : " +valeur+ " en entier" );


  
 }

}

Je lance la compilation du programme mais le message d'erreur s'affiche : java.lang.NumberFormatException . Cela fait déjà un moment que je cherche ce qui ne va pas dans mon code mais que je ne trouve pas pourquoi même lorsque j'entre des chiffres ce message s'affiche ?

Je vous remercie à tous pour votre aide
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Le problème c'est
Integer.parseInt(tmp)
car la valeur de
tmp
n'est pas un nombre, mais une concaténation de
" "
(ligne 8), et des différents
C
(ligne 23), dont le
'\r'
que tu n'as pas exclu.

Remarque : puisque tu lis les chiffres un à un, tu pourrais faire mieux qu'un parseInt en calculant directement le nombre, sans passer par un String intermédiaire.
0
Zabou
 
Bonjour KX ! Je te remercie pour ta réponse :)
Je suis sous MacOS, je pensais donc qu'exclure '\r' n'était pas nécessaire puisque la touche entrée sur Mac n'est caractérisée que par la touche '\n' , si je ne me trompe ?
Désolée si je parais gourde mais j'en suis à deux semaines d'auto-formation. Certaines choses me paraissent encore abstraites.
Deuxième point que j'ai oublié de préciser mais qui visiblement était important de l'être, l'exercice sur la boucle while qui m'a menée à faire ce codage insérait également une nouvelle méthode, celle du BufferedReader dont je ne maîtrise encore rien. L'exercice porte sur "apprendre à écrire une boucle while et de comprendre comment réaliser la saisie d'un entier au clavier sans utiliser la classe Scanner"(seule classe que je maitrise jusqu'alors)
Dans tous les cas, je te remercie d'avoir répondu présent et de m'avoir apporté ton aide !
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > Zabou
 
Sur MacOS peut-être que le \r n'est pas utile, mais de toute façon le " " serait suffisant pour avoir l'erreur.
Remarque : dans un programme Java - multiplate-forme - il vaudrait mieux éviter les spécificités d'un OS.

Quant au BufferedReader (pas très utile en vrai), il te permettrait de faire un readLine comme le Scanner, ce serait plus simple.

BufferedReader buf = new BufferedReader(new  InputStreamReader(System.in));
String line = buf.readLine();

Voir la documentation : https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/BufferedReader.html
0
Zabou
 
Je te remercie infiniment KX pour ton aide :)
Pour le lien vers une documentation, également !
0
Zabou
 
Ok. Je viens enfin de trouver l'erreur, qui était teeeellement idiote et évidente ...... J'ai affecté une valeur à la variable tmp en ajoutant un espace :
String tmp = " "
Alors que NON, il nous la fallait nulle cette variable, et donc sans espace :
String tmp = ""

Voilà !

Merci dans tous les cas KX
0