Einlesen und Eingabe prüfen

StraboN

Grünschnabel
Hallo :)

Möchte eine Klasse schreiben in der eine Zahl von 1-7 eingelesen wird. Danach sollte ebenfalls geprüft werden, ob es denn wirklich eine Zahl aus diesem Bereich ist. Hier mal das was ich bereits gemacht hab:

Code:
import java.util.Scanner;

public class ScanSpalte
{
    public static int einlesen() 
        {
            Scanner tastaturLeser = new Scanner(System.in);
            String line="a"; //Damit beim ersten Durchlauf der Schleife nichts zutrifft und so mind. ein Mal eingelesen wird.
            while ((line.length() != 1) && (line.charAt(0)<49) && (line.charAt(0)>55)) //Prüfen ob Zahl 1-7?!
                {
                    System.out.print("Spieler x: ");
                    line = tastaturLeser.nextLine();
                }
            int spalte=Integer.parseInt(line);
            return spalte;
        }
}

Achso die Fehlermeldung lautet übrigens:
ava.lang.NumberFormatException: For input string: "a"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:481)
at java.lang.Integer.parseInt(Integer.java:514)
at ScanSpalte.einlesen(ScanSpalte.java:22)

Hat jemand ne Ahnung was falsch ist?
Vielen Dank vorab! ;)

mfg StraboN
 
Nein, ist ziemlich schwer da es die Zeile 22 garnicht gibt.
Aber das könnte eventuell ein Problem werden: "line.charAt(0)<49"
Du könntest aber "=\"a\"" weglassen und als allererst in der While prüfen, ob line überhaupt auf Inhalt verweißt:
while(line == null || (line.length() != 1 && line.charAt(0) < 49 && line.charAt(0) > 55) usw.
 
SRY 4 Doppelpost aber ich habs jetzt mal so umgeschrieben:

Code:
import java.util.Scanner;

public class ScanSpalte
{
    public static int einlesen() 
        {
            Scanner tastaturLeser = new Scanner(System.in);
            String line="a"; //Damit beim ersten Durchlauf der Schleife nichts zutrifft und so mind. ein Mal eingelesen wird.
            while ((line.length() != 1) && (line.charAt(0)<49) && (line.charAt(0)>55))
                {
                    System.out.print("Spieler x: ");
                    line = tastaturLeser.nextLine();
                }
            int spalte=(int)line.charAt(0);
            return spalte;
        }
}


Die Rückgabe lautet jetzt 97, was dem ASCII-Wert für "a" entspricht. Irgendwie übergeht der komplett die Schleife oO
 
Hi
Wäre nett gewesen wenn du geschrieben hättest wo die Exection aufgetreten ist.
Gib vor "int spalte=Integer.parseInt(line);" mal line aus: "System.out.println("line");"

Tipp:
Java:
int blah = Integer.parseInt("a");

Du könntest z.B. line anstatt "a" 0 zuweisen.
Und wenn du dich jetzt fragst wieso denn line keine Nummber zugewiesen wurde schau dir mal das an:
Java:
(line.charAt(0)<49) && (line.charAt(0)>55)
//Die Zahl muss kleiner 49 und gleichzeitig grösser 55 sein? ;)


Gruss
 
Zuletzt bearbeitet:
Natürlich tut er das. (Bin ein Depp.)
Er rennt durch solange line.length() ungelich 1 ist, und halt kleiner als 49 und größer als 55. Schon mal 2 und 3 können niemals gleichzeitig auftrehten, damit ist die Schleife immer false.
 
Schon mal 2 und 3 können niemals gleichzeitig auftrehten, damit ist die Schleife immer false.

Hä, wieso das denn? Wenn der nen Char hat der >49 (ASCII-Code) ist und <55 (ASCII-Code) bricht die Schleife ab. Ansonsten läuft sie weiter! Oder seh ich das falsch?

//Edit: UPS xD

while ((line.length() != 1) && (line.charAt(0)<49) || (line.charAt(0)>55))

so gut? :)
 
Zuletzt bearbeitet:
Jupp, da wurde was falsch verstanden.

"While" heißt übersetzt nämlich "wärend" oder "solange", also heißt dein Code praktisch:
Code:
während(line.charAt(0)<49) && (line.charAt(0)>55)){}

Und das kann nur schiefgehen.
Ciao
DosCoder
 
Zurück