1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

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

  • froschhund
  • 27. März 2009 um 20:53
  • Unerledigt
  • froschhund
    3
    froschhund
    Mitglied
    Reaktionen
    1
    Punkte
    46
    Beiträge
    6
    • 27. März 2009 um 20:53
    • #1

    Hallo!

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

    Es geht um folgenden grundlegenden Code:

    Java
    import java.util.Scanner;
    
    
    class Test {
        public static void main(String args[]) {
    
            Scanner input = new Scanner(System.in);
            int x = 0;
    
            while (input.hasNextInt() == true) {
                x = input.nextInt();
            }
    
            System.out.print(x);
        }
    }
    Alles anzeigen

    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

  • Paulchen
    1
    Paulchen
    Gast
    • 27. März 2009 um 20:57
    • #2

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

  • DavidN
    3
    DavidN
    Mitglied
    Reaktionen
    1
    Punkte
    46
    Beiträge
    8
    • 21. April 2009 um 21:05
    • #3

    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.

    Java
    import java.util.Scanner;
    
    
    class Test {
        public static void main(String args[]) {
            Scanner sc = new Scanner(System.in);
            String line = sc.nextLine();
            sc.close();
            Scanner input = new Scanner(line);
            int x = 0;
    
            while (input.hasNextInt() == true) {
                x = input.nextInt();
            }
    
            System.out.print(x);
        }
    }
    Alles anzeigen
  • sutupud
    13
    sutupud
    Mitglied
    Reaktionen
    59
    Punkte
    1.659
    Beiträge
    320
    • 21. April 2009 um 21:21
    • #4
    Zitat von DavidN

    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)

  • DavidN
    3
    DavidN
    Mitglied
    Reaktionen
    1
    Punkte
    46
    Beiträge
    8
    • 21. April 2009 um 21:28
    • #5

    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.

  • sutupud
    13
    sutupud
    Mitglied
    Reaktionen
    59
    Punkte
    1.659
    Beiträge
    320
    • 21. April 2009 um 21:43
    • #6

    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."

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

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung