# Wie auf leere Benutzereingabe (int) prüfen?



## DrPCox (6. Jun 2010)

Hallo,

ich habe ein Programm, bei dem ein Benutzer zur Eingabe einer Integer aufgefordert wird. Wie kann ich nun überprüfen, ob der Benutzer was eingegeben hat?

Wenn ich sowas mache:


```
int eingabe = benutzereingane;
if (eingabe == null) {ausüben}
```
dann meckert Eclipse, dass der ==Operator für int, null nicht verfügbar wäre.

Ich danke schon mal für die Hilfe.


----------



## Gast2 (6. Jun 2010)

Wo kommt den [c]benutzeriengabe[/c] her?

Wenn du nicht groß was ändern willst:

```
Integer eingabe = benutzereingane;
if (eingabe == null) {ausüben}
```


----------



## Mujahiddin (6. Jun 2010)

Hallo.
Wie du schon sagst, ein int kann nicht null sein, weil int kein Objekt ist.
Da der User wahrscheinlich über ein Textfeld ein Integer eingeben soll (denke ich mal), kannst du ja mit der Abfrage 
	
	
	
	





```
if(myTextFeld.getText().length() == 0) // keine Eingabe!
```
 oder, wenn du verhindern willst, dass auch normale Strings, also Nichtzahlen eingegeben werden: 
	
	
	
	





```
int eingabe;
try{ eingabe = Integer.parseInt(myTextField.getText()); }
catch(NumberFormatException e)
{ myLabel.setText("Bitte Zahl eingeben!"); }
```
Grüße.


----------



## DrPCox (6. Jun 2010)

Die benutzereingabe kommt über ein paket namens "GraphicIO". Wurde uns vom Lehrstuhl zur Verfügung gestellt.

geht es noch anders als mit "Integer". Die Struktur mit "int" ist uns leider vorgegeben


----------



## DrPCox (6. Jun 2010)

Und die eingabe erfolt schon als int....

das ganze sieht im Original so aus:


```
int eingabe = GraphicIO.readInt("Bitte geben sie eine Zahl ein");
```

angenommen nichts würde eingegeben und die aufforderung einfach weggeklickt...was würde dann in "eingabe" stehen?


----------



## Gast2 (6. Jun 2010)

Probier es aus? Das kommt darauf an wie die Klasse GraphicIO mit sowas umgeht. Ich würde wohl eine Exception werfen in dem Fall.


----------



## DrPCox (6. Jun 2010)

fassy hat gesagt.:


> Probier es aus? Das kommt darauf an wie die Klasse GraphicIO mit sowas umgeht. Ich würde wohl eine Exception werfen in dem Fall.


öhm....bitte? soweit sind wir noch nicht...ist auch gerade eher die kür einer übungsaufgabe und nicht mehr teil des aufgabe. war halt persönliche neugier. danke trotzdem.


----------



## Mujahiddin (6. Jun 2010)

Versuch es doch über ein String...

```
String eingabe = GraphicIO.readString("Bitte Zahl eingeben");
int eingabeZahl;
if(eingabe.length() == 0)
{
    //Keine Zahl wurde eingegeben!
}
else
{
   eingabeZahl = Integer.parseInt(eingabe);
}
```


----------



## DrPCox (6. Jun 2010)

geht ja eben nicht. wir sind da von den variablen-typen schon gebunden....leider.

trotzdem nochmals dankeschön.


----------



## Gast2 (6. Jun 2010)

Wenn GraphicIO die Methode readInt hat 


```
public static int readInt(String message){
...
}
```

Dann MUSS sie auch ein [c]int[/c] zurückgeben ODER eine Exception werfen. [c]null[/c] ist nicht möglich. Also musst du mal sehn wie GraphicIO in dem Fall arbeitet (z.B. return 0 oder einen anderen default Wert) wenn das Dialog Fenster weggeklickt wird. Einfach ausprobieren.


```
int eingabe = GraphicIO.readInt("Bitte geben sie eine Zahl ein");
System.out.println(eingabe);
```

Dann ausführen und Dialog Fenster wegklicken. Was steht nun auf der Konsole?


----------



## DrPCox (6. Jun 2010)

fassy hat gesagt.:


> Wenn GraphicIO die Methode readInt hat
> ...
> 
> ```
> ...


ich zitiere mal mein programm: 





> Alas, your input cannot be converted into an int value.


----------



## Gast2 (6. Jun 2010)

Und dann? Ist das Programm beended? Gibt es dir eine weitere Chance? ...

Ist doch alles gut. GraphicIO erkennt das du kein int eingegeben hast und lässt dich nicht weitermachen. Sprich du musst nicht in deinem Code prüfen ob es eine gültige Eingabe gab oder nicht.


----------



## newbie2009 (6. Jun 2010)

oder versuch sowas :


```
String eingabe = GraphicIO.readString("geben sie einen wert ein ");
int wert;
if(eingabe==null){
System.out.pritnln("ungültige eingabe");
} else{wert=Integer.parseInt(eingabe);
}
```

somit hast den wert dann auch als primitiven Datentypen Integer.  sollte funktionieren .


----------



## U2nt (7. Jun 2010)

Oder man setzt den wert des int vorher auf zb -1 und prueft dann ob der wert sich geaendert hat oder immernoch -1 is... Dann kann man halt nurnet -1 eingebe


----------



## DrPCox (7. Jun 2010)

U2nt hat gesagt.:


> Oder man setzt den wert des int vorher auf zb -1 und prueft dann ob der wert sich geaendert hat oder immernoch -1 is... Dann kann man halt nurnet -1 eingebe


Vielen Dank. Das ist für diesen Fall echt die eleganteste Lösung!


----------



## Gast2 (7. Jun 2010)

Nein, ist definitiv nicht "elegant". Was ist wenn der User -1 eingeben will? Elegant ist was anderes als genau einen Wert zu blacklisten...

Wie ich schon oben sagte: Die Funktion MUSS eine int zurückgeben oder eine Exception werfen. Irgendwelche faulen defaults auswerten musst du nicht in deiner Anwendung. Du kannst dich drauf verlassen das GraphicIO dir einen gültigen Wert übergibt. Den kannst du natürlich noch validieren, z.B. testen ob der Wert in einem von dir definierten Gültigkeitsbereich liegt - aber du musst, bzw kannst nicht verifizieren ob [c]null[/c] übergeben wurde - [c]GraphicIO.readInt[/c] kann NIEMALS [c]null[/c] zurückgeben.


----------



## DrPCox (7. Jun 2010)

> Nein, ist definitiv nicht "elegant". Was ist wenn der User -1 eingeben will? Elegant ist was anderes als genau einen Wert zu blacklisten...


Doch, in diesem Fall ist es die eleganteste Lösung, weil Eingaben vom User, die kleiner als 1 sind, abgefangen werden und er solange zu einer neuen Eingabe aufgefordert wird, bis eine gültige Eingabe erfolgt ist.


----------

