# Einlesen und Eingabe prüfen



## StraboN (9. Januar 2009)

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:


```
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


----------



## Kai008 (9. Januar 2009)

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.


----------



## StraboN (9. Januar 2009)

SRY 4 Doppelpost aber ich habs jetzt mal so umgeschrieben:


```
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


----------



## jeipack (9. Januar 2009)

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:

```
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:

```
(line.charAt(0)<49) && (line.charAt(0)>55)
//Die Zahl muss kleiner 49 und gleichzeitig grösser 55 sein? ;)
```


Gruss


----------



## Kai008 (9. Januar 2009)

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.


----------



## StraboN (9. Januar 2009)

> 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?


----------



## DosCoder (9. Januar 2009)

Jupp, da wurde was falsch verstanden.

"While" heißt übersetzt nämlich "wärend" oder "solange", also heißt dein Code praktisch:

```
während(line.charAt(0)<49) && (line.charAt(0)>55)){}
```

Und das kann nur schiefgehen.
Ciao
DosCoder


----------

