while (hasNextInt()) hört nicht auf "true" zu sein...

  • Hallo!

    Ich habe scheinbar ein gröberes Verständigungsproblem mit der Methode hasNextInt()

    Es geht um folgenden grundlegenden Code:

    Wenn man das Programm ausführt und zum Beispiel

    4 2 5 [ENTER]

    in die Konsole eintippt, so hört der Scanvorgang nicht etwa auf, sondern wartet so lange bis ein weiteres Zeichen eingegeben wird.
    Das will ich natürlich nicht.
    Wieso liefert hastNextInt() also true, auch wenn überhaupt keine token mehr da sind, die der Scanner lesen könnte?

    MfG, Michael

  • Damit hasNextInt() false wird, musst du dem Scanner ein EOF füttern. Strg+Z unter Windows, Strg+D unter Linux.

  • Ein Workaround: Wenn du mit nem Scanner alles als eine Zeile (String) einliest und dann den String als Quelle des zweiten Scanner nimmst, dann bricht er ab nach dem ENTER.
    Ob die Lösung elegant ist, kann ich dir leider nicht sagen. Funktionieren tut sie zumindest und im EProg Abgabegespräch wurde sie auch nicht zerrupft.

  • Ein Workaround: Wenn du mit nem Scanner alles als eine Zeile (String) einliest und dann den String als Quelle des zweiten Scanner nimmst, dann bricht er ab nach dem ENTER


    :wtf:?
    schon mal von Integer.parseInt(String) gehört?
    außeredem ist das kein 'workaround', weil das kein wirkliches problem war, es ging einfach nur darum, dass hasNextInt() solange blockiert, biss entweder was anderes kommt als ein int oder der inputdatenstrom geschlossen ist, was mit ctrl+d passiert.

    edit: außerdem, was wenn ich bei deinem beispiel die zeile
    1 2 3 4 5 6 7[enter]
    eingebe? x ist dann 7...

    "All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
    "No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."

    😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😒😓😔😖😘😚😜😞😠😡😢😣😥😨😩😪😫😭😰😱😲😳😵😶😷

    2 Mal editiert, zuletzt von sutupud (21. April 2009 um 21:24)

  • na ich nehme an, er hatte vor, dass die eingabe auch aufhört, wenn er enter drückt. er weiß jetzt, warum es nicht ging und ich habe eine möglichkeit aufzeigen wollen, wie es so geht, wie er sichs von anfang an dachte.
    und da es aussieht, als wären es die ersten java-gehversuche ist wohl ne lösung die eigentlich nichts verwendet was nicht sein code auch schon hatte auch ganz gut zum nachvollziehen.

  • trotzdem, von einem scanner zu lesen nur um den output wieder in einen scanner zu stecken... muss nicht sein! warum ist es schlimm, wenn man an das programm ein EOF senden muss? ist normalerweise standard bei programmen, die von stdin lesen.
    außerdem kann ja sein, dass nach dem letzten int noch was kommt, das dann mit readline mitgelesen wird. aber es bleibt ja schlussendlich jedem selbst überlassen wie es gemacht wrid, ich wollte nur ausdrücken dass ich hier mögliche probleme sehe.
    außerdem gehts ja darum zu verstehen, wie der scanner bzw. das einlesen von daten funktioniert.

    "All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
    "No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."

    😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😒😓😔😖😘😚😜😞😠😡😢😣😥😨😩😪😫😭😰😱😲😳😵😶😷

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!