christopher: Schwierigkeiten beim parseInt(String) einer Usereingabe

hallo helfer(innen),
ich habe ein kleines problem beim konvertieren eines
strings in einen integer. und zwar möchte ich dem
anwender die möglichkeit einer zahleneingabe geben.
da ich mich mit java noch nicht so recht auskenne habe
ich mir folgenden code teils selbst, teils via copy&paste
zusammengestellt :

---code-auschnit---------------------------
import java.io.*;
public class BSort
{
  public static void main (String [] args)
  {
    int test;
    String tempNo = new 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..
  2. kann/sollte ich nicht auch vielleicht die user-eingabe
       direkt als integer einlesen.. ?

ps: - den tag bis jetzt gegoogelt,
    - selfhtml-archiv-server ist ausgelastet

besten dank für eure hilfen

mfg
christopher

  1. hi,

    da ich mich mit java noch nicht so recht auskenne habe

    ... ich es wieder mal mit javascript verwechselt.

    ich bekomme stets einen fehler wenn ich versuche den vom

    user eingegebenen string in einen integer umzuwandeln.
    und _welchen_?

    gruss,
    wahsaga

    1. hallo wahsaga,

      da ich mich mit java noch nicht so recht auskenne habe
      ... ich es wieder mal mit javascript verwechselt.

      nur weil das deine anfängerfehler waren heisst das noch lange
      nicht, dass gleich jeder so dumm ist!

      ich bekomme stets einen fehler wenn ich versuche den vom
      user eingegebenen string in einen integer umzuwandeln.
      und _welchen_?

      sag mal, kannst du nicht lesen ? ich erwähnte bereits,

      die eingabe ist eine einfache zahl zwischen 1 und 9.

      lass deine qualitativ wertlosen kommentare doch einfach sein
      und lass den leuten den vorrang, die auch ahnung davon haben...
      danke

      christopher

      1. hi,

        da ich mich mit java noch nicht so recht auskenne habe
        ... ich es wieder mal mit javascript verwechselt.
        nur weil das deine anfängerfehler waren heisst das noch lange
        nicht, dass gleich jeder so dumm ist!

        ich habe diesen fehler auch in meiner anfangszeit nciht gemacht, da ich mich in ausreichendem maße mit den grundlagen der von mit verwendeten techniken beschäftige.

        ich bekomme stets einen fehler wenn ich versuche den vom
        user eingegebenen string in einen integer umzuwandeln.
        und _welchen_?
        sag mal, kannst du nicht lesen ? ich erwähnte bereits,
        die eingabe ist eine einfache zahl zwischen 1 und 9.

        und das ist eine _fehlermeldung_?

        lass deine qualitativ wertlosen kommentare doch einfach sein
        und lass den leuten den vorrang, die auch ahnung davon haben...

        wenn das gesetz wäre, hätte deine mutter dir das sprechen wohl gar nicht erst beibringen sollen.

        gruss,
        wahsaga

      2. hi,

        da ich mich mit java noch nicht so recht auskenne habe
        ... ich es wieder mal mit javascript verwechselt.
        nur weil das deine anfängerfehler waren heisst das noch lange
        nicht, dass gleich jeder so dumm ist!

        sorry, ich dachte gestern beim posten, dass dein posting unter dem themenbreich javascript aufgetaucht wäre. muss das mit einem anderen zeitgleich geöffneten posting durcheinader gebracht haben.

        gruss,
        wahsaga

  2. 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

    1. hallo,
      danke für deine lösende antwort.

      folgendes habe ich nun korrigiert:

      1. String tempNo = einlesen();
      2. try-catch eingefügt
      3. usereingabe via trim von whitespaces entfernt
        oder
      4. bytes des puffer von 50 auf 1 reduziert.
        (beides führt zum whitespace-losen ergebnis)

      nun klappt es einwandfrei.
      besten dank nochmal..

      mfg
      christopher

  3. Hi Christopher,

    lass Dir mal mit System.out.println den String vor parseInt ausgeben, ob da wirklich nur die Zahl drinsteht, Kandidaten für Probleme sind auch nicht Sichtbare Zeichen, z.B. ein Zeilenumbruch.

    Gruss

    Marko

    1. hallo,
      genau daran lag es..
      dir auch besten dank

      mfg
      christopher