NumberFormatException

Blind Guardian

Grünschnabel
Hi Leutchens,

Die Fehlermeldung direkt sagt mir etwas und ich weiss auch was da nicht stimmt, mein Problem liegt darin, dass ich nicht weiss wieso das auftritt. Zu meinem Problem...

...ich habe ein Programm, wo man in einer ersten Auswahl eine Maschine/Server auswählen kann, wo man mittels Eingabe der Zahl wählen kann, dann wird auf diese Maschine connectet, mehr wird dort ersteinmal nicht gemacht.

...danach kommt eine zweite Abfrage, wo der Nutzer gefragt wird mit welchem Kunden er etwas zu tun haben möchte. Auswahl auch wieder mittels Zahl eingeben.

...bei beiden Auswahlen, wird danach per if, else if entschieden was geschieht.

...erste Auswahl klappt, ich kann die Zahl eingeben, er tut das was in der Anweisung zur Auswahl steht.

...Dann gibt er mir die Bildschirmausgabe von der zweiten Auswahl und bricht ab. Leider weiss ich nicht wieso er dann abbricht...

Mein Quellcode ist wie folgt...

Code:
public static void main (String args[]) throws IOException
 {
  //Erste Auswahl
  byte buffer_k[]=new byte[2];
  
  System.out.println("1.BMR	2. Exit");
  System.out.print("Geben sie ihre Wahl ein: ");
  
  int kunde   = System.in.read(buffer_k, 0, 2);
  String input_k  = new String(buffer_k, 0, 0, kunde);
  int y2    = Integer.parseInt(input_k.trim());
  
  if(y2==1)
  {System.out.println("Hallo");}
  else if(y2==2)
  {System.exit(1);}
  
  //Zweite Auswahl
  
  byte buffer_m[]=new byte[2];
  
  System.out.println("1. Atlantis   2. Exit");
  System.out.print("Geben sie ihre Wahl ein: ");
  
  int maschine  = System.in.read(buffer_m, 0, 2);
  String input_m = new String(buffer_m, 0, 0, maschine);
  int y   = Integer.parseInt(input_m.trim());
  
  if(y==1)
  {System.out.println("!Tschüss!");}
  else if(y==2)
  {System.exit(2);}
 }

Der Compiler sagt es ist alles in Ordnung, wenn ich das Programm durchlaufen lasse gibt er nach der ersten Auswahl folgende Fehlermeldung

Exception in thread "main" java.lang.NumberFormatException:For input string"
at java.lang.NumberFormatException.forInputString (NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:489)
at java.lang.Integer.parseInt(Integer.java:518)
at testen2.main(Testen2.java.35
Das er mir eine Fehlermeldung ausgibt, das er beim zweiten Mal nichts parsen kann ist mir klar, da ich dort nichts eingebe...Ich frage mich aber wieso das Programm abbricht, bevor ich dort was eingeben kann...

Vielleicht fällt jemandem was auf, was mir nicht auffällt...

-MfG- Danilo
 
Also ich habs mal kurz gecheckt:

Die Variable input_k ist leer (mach Dir mal mehr Ausgaben, dann siehst Du das). Dadurch fliegt Dir dann die NumberFormatException um die Ohren, da ein leerer String keine gültige Zahl ist. Vielleicht solltest Du Dir mal die API anschauen, denn eine Ziffer brauchst Du nicht über ein BytaArray einlesen um es dann hinterher mehrfach umzuwandeln.

Einfacher gehts so:
Code:
//Erste Auswahl
     BufferedReader stdin = new BufferedReader( new InputStreamReader( System.in ) );
     
     System.out.println("1.BMR	2. Exit");
     System.out.print("Geben sie ihre Wahl ein: ");
     
     
     String kunde = stdin.readLine();
     
     System.out.println("kunde: " + kunde);
     
     if(kunde.length() > 0){
         int y2    = Integer.parseInt(kunde.trim());
         
         System.out.println("y2: " + y2);
         
         if(y2 == 1)
         {
             System.out.println("Hallo");
         }
         else if( y2 == 2)
         {
             System.exit(1);
         }
     }
     else{
         System.out.println("Kunde wurde nicht eingegeben");
     }

Wichtig ist, dass Du die Eingaben auf jeden Fall auf Sinnigkeit abfragst.
 
Danke schön für die hilfe, es funktioniert jetzt so. aber ich weiss nicht genau wieso das so wie ich es hatte nicht ganz ging...der Kunde hätte theoretisch nicht leer sein dürfen bzw ist eigentlich nicht leer, weil ja das "hallo" ausgegeben wird. So ganz versteh ich das nicht. Aber naja kann man wohl nichts machen, danke nochmal.
 
Jetzt mache ich es so, wie Cham geschrieben hat und da geht es. Und da funktionieren beide Angaben hintereinander im Ablauf, so wie ich es versucht hatte ging nur eine einzelne Abfrage, wenn ich da beide Abfragen hintereinander gemacht habe kam zwar noch die Ausgabe von der ersten, aber bevor ich bei der zweiten etwas eingeben konnte, kam dann die Fehlermeldung.
 
Snape hat gesagt.:
Klar, weil vermutlich im Buffer noch etwas von der ersten Eingabe drin stand/steht.

neee, es ist doch schon beim Auswerten der ersten Ausgabe schiefgegangen. Der Kollege

Code:
String input_k  = new String(buffer_k, 0, 0, kunde);

war schon ein Leerstring.
 
1. Sind es zwei verschiedene Buffer gewesen, buffer_k für den Kunden und buffer_m für die Maschine.

2. Wenn der String leer war, wieso habe ich dann trotzdem das "Hallo" als Ausgabe bekommen, welches durch die if Schleife ausgegeben wird...

3. Wieso hat es so funktioniert, wie ich es oben habe, wenn ich nur eins von beiden genommen habe.

4. Das ganze verwirrt mich ziemlich doll :confused: :)
 
Zurück