Schwierigkeiten beim parseInt(String) einer Usereingabe
christopher
- java
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.
--
ps: - den tag bis jetzt gegoogelt,
- selfhtml-archiv-server ist ausgelastet
besten dank für eure hilfen
mfg
christopher
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
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
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
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
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.
- 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
}
- kann/sollte ich nicht auch vielleicht die user-eingabe
direkt als integer einlesen.. ?
Nein.
Viele Grüße,
Martin Jung
hallo,
danke für deine lösende antwort.
folgendes habe ich nun korrigiert:
nun klappt es einwandfrei.
besten dank nochmal..
mfg
christopher
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
hallo,
genau daran lag es..
dir auch besten dank
mfg
christopher