Martin Jung: Schwierigkeiten beim parseInt(String) einer Usereingabe

Beitrag lesen

Hi,

---code-auschnit---------------------------
import java.io.*;
public class BSort
{
  public static void main (String [] args)
  {
    int test;
    String tempNo = new String();

dieses String Objekt ist überflüssig, da Du bereits in der nächsten Zeile die Referenz auf ein anderes Objekt (dem Rückgabewert der Methode) setzt, also die Zeile einfach löschen.

tempNo = einlesen();

String tempNo = einlesen();

test = Integer.parseInt(tempNo);
                 [^hier meckert er]
  }
  public static String einlesen()
  {
    byte[] Puffer = new byte[50];
    try {
 System.in.read(Puffer,0,50);
    }  catch(java.io.IOException e) {}
    String Variable = new String(Puffer);
    return Variable;
  }
}
---fehlermeldung--------------------------
Exception in thread "main" java.lang.NumberFormatException: For input string: "1
       "
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
        at java.lang.Integer.parseInt(Integer.java:435)
        at java.lang.Integer.parseInt(Integer.java:476)
        at BSort.main(BSort.java:14)

ich bekomme stets einen fehler wenn ich versuche den vom
user eingegebenen string in einen integer umzuwandeln.
die eingabe ist eine einfache zahl zwischen 1 und 9.

  1. ich wäre euch sehr dankbar wenn mir einer evtl meinen
       denkfehler hinsichtlich des parseInts erklären könnte..

Du hast keinen Denkfehler, aber
1. die Exception teil mit, dass der String "1

"

nicht in eine int-Primitive geparst werden kann.
Integer.parseInt(String s) ist maximal restriktiv - es können (fast) ausschließlich numerische Literale geparst werden [Zitat API-Docs 1.3.x: "The characters in the string must all be decimal digits, except that the first character may be an ASCII minus sign '-' ('\u002d') to indicate a negative value...."]
Der von stdin gelesene Stream enthält aber White-Spaces und einen Zeilenumbruch (alles zwischen den Anführungszeichen). Folglich wird im Einklang mit der API die entsprechende Exception geworfen. D.h., vor der Konvertierung müssen diese Charaktere aus dem zu konvertierenden String entfernt werden.

2. Sollten Eingabefehler niemals zum Abbruch eines Programms führen, daher

int test;
try {
    test = Integer.parseInt(tempNo);
} catch (NumberFormatException e) {
    // hier mitteilung an den user und/oder gegebenfalls default wert setzen
}

  1. kann/sollte ich nicht auch vielleicht die user-eingabe
       direkt als integer einlesen.. ?

Nein.

Viele Grüße,
Martin Jung