Number format exception

Fermé
Zabou - Modifié le 15 nov. 2018 à 18:05
 Zabou - 16 nov. 2018 à 16:04
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
15 nov. 2018 à 18:24
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
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > Zabou
16 nov. 2018 à 14:10
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
Je te remercie infiniment KX pour ton aide :)
Pour le lien vers une documentation, également !
0
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