hasNextInt

Status
Nicht offen für weitere Antworten.

F34RL355

Mitglied
Guten Abend !

Ich hätte folgende Frage: Und zwar warum ist es so, dass das Programme (Ausschnitt siehe unten) auf eine Eingabe wartet. Soll heißen, wenn ich nichts eingebe und "Enter" drücke wartet es bis ich eine Eingabe getätigt habe und kommt nicht gleich in die else-Schleife - Warum ?

Ich will, dass wenn man nichts eingibt auch gleich in die else-Schleife kommt.
Geht das :bahnhof:

Ich komm irgendwie nicht darauf was ich noch probieren könnte, und ich hoffe, dass mir hier jemand weiterhelfen kann.

Code:
      int num1 = 0;
      
      Scanner reader = new Scanner(System.in);
 
      if(reader.hasNextInt())
        num1 = reader.nextInt();

      else
        System.out.println("FALSCHE EINGABE");

LG,
Stefan
 

Schandro

Top Contributor
ruf
reader.nextLine()
auf und parse das Ergebnis zu nem int. Wenn dabei ne NumberFormatException geschmissen wird, fang sie und führ das aus was bei dir zurzeit im else-Teil passiert.
 

F34RL355

Mitglied
Erstmal danke für dein Antwort !

Ich bin noch ganz am Anfang meines Informatikstudiums und "parsen" sagt mir leider noch gar nichts ???:L

also um es ganz genau zu beschreiben, wir sollen ein Programm schreiben, dass 2 int-Werte einliest und einen Operator (in der Form 5 2 / - Ergebnis sollte sein 2).

Das hab ich alles hinbekommen, ABER vorgabe war auch, dass wenn man z.b. nur 1 2 eingibt "FALSCHE EINGABE" ausgegeben wird, genauso wie 1 5 10, weil 10 kein operator ist.

Ich krieg alles hin, außer wenn ich nur 2 Zahlen eingeb, wartete das Prog solange bis ich nochetwas eingegeben hab...

Code:
      if(reader.hasNextInt()){
        num1 = reader.nextInt();
     
        if(reader.hasNextInt()){
          num2 = reader.nextInt();
          
          if(reader.hasNext()){          
            operator = reader.next().charAt(0);
            
           }
         }
      }
    else
        System.out.println("FALSCHE EINGABE");

Gibts den da vielleicht noch eine andere (einfache) Lösung ?

Und warum wartet er auf eine Eingabe, bei der letzten if-schleife, wenn nichts mehr zum einlesen gibt, sollte doch has.next = false sein oder ??

Bin gerade auf was draufgekommen:

Also wenn ich das Prog mit einem Input txt ausführe der nur 2 Zahlen enthalt. Funktionierts wunderbar und er kommt in die else schleife. Versteh zwar ned ganz warum das mit der Konsole ned funzt, aber was solls :D
 
Zuletzt bearbeitet:

Murray

Top Contributor
1. Scanner.hasNext[xyz]() und Scanner.next[xyz]() warten ggfs. darauf, dass über den darunterliegenden Stream Daten kommen. Das ist in deinem Fall einerseits auch gut so, denn der Rechner kann sicher schneller aus der Standardeingabe lesen als du schreiben kannst. Andererseits erwächst daraus das Problem, dass man irgendwie entscheiden müsste zwischen "im Moment sind noch keine Daten da, aber vielleicht kommt ja später noch etwas" und "es kommen garantiert keine Daten mehr".

2. if-schleife.de
 

F34RL355

Mitglied
Hab jetzt endlich die Lösung für mein Problem :D

Sollte noch jemand das gleiche Problem haben:

Also die Eingabe in einer Konsole wird mit "End of File" beendet.

Dies erreicht man in Linux mit <Strg> + 'Z' und unter Windows mit <Strg> + 'D'

_________________________________________________________________

Take LINUX and forget Blue Screens

F34RL355
 
Status
Nicht offen für weitere Antworten.

Oben