# Eingabe überprüfen mit in.done()



## Devil_Noe (16. Okt 2009)

Hi there!

Aufgrund mangelnder Intelligenz muss ich folgende Frage stellen:

Ich muss mich seit 2 Wochen mit Java beschäftigen, kenn mich daher noch so gut wie gar nicht aus und muss zur Weiterverarbeitung 5 Zahlen einlesen (Vorgabe ist int).

Da ich es gar nicht leiden kann, wenn derartige Dinge nicht perfekt sind, möchte ich gerne prüfen, ob tatsächlich jeweils eine Zahl (und nicht ein Buchstabe, ..) eingegeben wurde und die Möglichkeit einer zweiten Eingabe anbieten, oder solange die Eingabe abfragen, bis eine Zahl eingegeben wurde.

Mein erster Ansatz war:


```
int zahl;

Out.print("Bitte Zahl 1 eingeben: ");	
zahl = In.readInt();

 if(In.done() != true) {
  Out.print("Bitte geben Sie einen korrekten Wert ein: ");
  zahl = In.readInt();
  }

Out.println("Die Zahl ist " + zahl);
```


Habe es mit while, do while versucht ..... Ergebnis von der Endlosschleife bis alles mögliche. Nur nicht das, was ich wollte.

Kann mir jemand einen Tip geben, wie ich das mit Anfängerwissen hinbekomme??

Vielen Dank. Hope somebody will help!!


----------



## Landei (16. Okt 2009)

Was genau ist In? Was passiert, wenn da jemand Buchstaben eingibt? Gibt es dann einen Fehler?


----------



## javimka (16. Okt 2009)

was sind denn In und Out? Die Grossschreibung deutet auf eine Klasse hin, wobei readInt() und done() dann statische Funktionen sein müssten.
Oder sind es Objekte (die schreibt man üblicherweise klein), wenn ja von welcher Klasse? Ich hätte vermutet, dass In das System.in sein könnte, das verfügt allerdings über keine Methode done().

Ich gehe davon aus, dass die Eingabe als String vorliegt. Eine billige Methode, zu prüfen ob es eine zahl ist, wäre folgendes:

```
boolean done = false;
while(!done) {
   try { 
      string = In.readInt();
      z = Integer.parseInt(string);
      done = true;
   } catch (NumberFormatException e) { }
}
```
(falls du try catch nach zwei Wochen Java bereits kennst)


// EDIT
was ich auch noch gerade gefunden, aber nicht überprüft habe:

```
if(string.matches("\\d*")){
      // dann ist es eine Zahl
      done = false;
}
```


----------



## Devil_Noe (16. Okt 2009)

Hi!

Danke für die schnellen Antworten!

In / Out sind beides Klassen die im selben Verzeichnis meiner Klasse stehen und dienen der Ausgabe und dem Einlesen. Die Methode In.done() prüft dabei ob das einlesen erfolgreich war und liefert den Wert true/false.

Wenn ich in meinem Fall dann einen Buchststaben oder eingebe, wird meiner Variablen offensichtlich null zugewiesen und die weiterführenden Berechnungen sind dementsprechend unbrauchbar!

try/catch kenne ich noch nicht, was mich aber nicht daran hindern wird, es zu verwenden! ;-). Werde das gleich mal versuchen!

Vielen Dank


----------



## javimka (16. Okt 2009)

Wenn du bei der Eingabe von Buchstaben null erhälst, wäre das ganze ja noch einfacher, du könntest ja dann einfach überprüfen, ob z null ist oder nicht:

```
String z = null;
while(z==null) { // solange z null ist
  System.out.println("Bitte Zahl eingeben: ");
  z = In.readInt();
}
System.out.println("Die zahl ist: "+z);
```


----------



## Devil_Noe (16. Okt 2009)

Hi Javimka!

Leider ergibt sich dann daraus ein Problem, wenn einer der einzugebenden Werten tatsächlich mal Null ist!!

Ich grübel noch, ich grübel noch, .....

Vielen Dank, vorerst


----------



## javimka (17. Okt 2009)

Devil_Noe hat gesagt.:


> Wenn ich in meinem Fall dann einen Buchststaben oder eingebe, wird meiner Variablen offensichtlich null zugewiesen...



Dann meinst du aber "0" und nicht "null" oder? 
Denn das ist ein grosser Unterschied, 0 ist ein Integer, null ist die leere Referenz.


----------

