Java: Ist ein Scanner object nur einnalig benutzbar?

Von: , 29.07.2009 12:43 Uhr

Liebe/-r Experte/-in,

diese Tage lerne ich Java per Autodidaktik.
Es soll theoretisch so gehen:

<code>
String s1;
int i1;
double d1;
Scanner In = new Scanner (System.in);
s1 = In.next ( );
s1 = In.nextLine ( );
i1 = In.nextInt ( );
d1 = In.nextDouble ( );
</code>

Geht praktisch bei mir leider nicht. Also die zweite s1 hat keine Chance, etwas durch das Input zugewiesen zu bekommen. Außerdem gebt es Exceptions wie folgt:

<code>
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:840)
at java.util.Scanner.next(Scanner.java:1461)
at java.util.Scanner.nextDouble(Scanner.java:2387)
at Text.main(Text.java:18)
</code>

In der Zeile 18 steht:

<code>
d1 = In.nextDouble ( );
</code>

Für Hilfe bedanke ich mich im voraus.
MfG
peter

2 Antworten zu dieser Frage

  1. Antwort von - abgemeldetes Mitglied - nach 18 Minuten 0 hilfreich
    Re: Java: Ist ein Scanner object nur einnalig benutzbar?

    Geht praktisch bei mir leider nicht. Also die zweite s1 hat
    keine Chance, etwas durch das Input zugewiesen zu bekommen.
    Außerdem gebt es Exceptions wie folgt:

    <code>
    Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:840)
    at java.util.Scanner.next(Scanner.java:1461)
    at java.util.Scanner.nextDouble(Scanner.java:2387)
    at Text.main(Text.java:18)
    </code>
    Ich denke, es hat damit zu tun, dass Du den Scanner nach einem ganz bestimmten Datentyp abfragst, nämlich einem Double. Evtl passt die Eingabe nicht zur Konvertierung und daher wird eine InputMismatchException geworfen.

    Ein Angabe Deiner Eingabewerte wäre hilfreich, vielleicht stand dort ein String oder eine andere nicht als Double zu parsende Angabe.

  2. Antwort von nach 38 Minuten 0 hilfreich
    Re: Java: Ist ein Scanner object nur einnalig benutzbar?

    Hallo Peter,

    ich fange ganz vorne an.
    Wenn du die Möglichkeit hast, mach dich zuerst mit den Java-Konventionen vertraut. Wenn du dich z.B. daran hältst Variablen immer klein zu beginnen (in statt In) wirst dir das Leben sehr viel einfacher machen (nicht falsch verstehen bitte, ist nur ein Tipp).

    Wenn ich mir das so ansehe, versuche ich mal Scanner.next() und Scanner.nextLine() zu erklären.

    Zunächst weist du der Variable s1 das erste Wort des eingegebenen Satzes (in.next() gibt also deine Eingabe bis zum ersten Leerzeichen zurück UND SPRINGT dann an diese Stelle!) zu.

    Direkt danach überschreibst du den Inhalt von s1 mit dem Rest deiner Eingabe bis zum Zeilenumbruch (in.nextLine()).

    Ich vermute mal, du hast nur ein Wort eingegeben und Eingabe gedrückt. Das bedeutet, du weist s1 dieses eine Wort zu und überschreibst es mit dem Rest der Zeile - also nichts.

    Der Fehler ist ein anderes Thema. nextInt() und nextDouble() erwarten Zahlen, die sie verarbeiten können. Gibst du aber keine Zahl ein, stürzen diese Funktionen mit der o.g. Maldung ab. InputMismatch heißt hier soviel: habe Zahl "double" erwartet, war aber ein Buchstabe!? Da das nicht geht stürzt er ab.

    Ich empfehle dir folgendes, um zu verstehen was passiert:
    [code]
    s1 = In.next ( );
    System.out.println("A:"+s1);
    s1 = In.nextLine ();
    System.out.println("B:"+s1);
    i1 = In.nextInt ( );
    System.out.println("C:"+i1);
    d1 = In.nextDouble ();
    System.out.println("D:"+d1);
    [/code]

    Und dann die Eingaben ohne Anführungszeichen :
    "abcd efgh ijkl"<enter>"abc"<enter>
    und beim zweiten Versuch:
    "abcd efgh ijkl"<enter>"123"<enter>"456"<enter>


    Viele Grüße
    Stefan [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

    Keine passende Antwort gefunden? Jetzt eigene Frage stellen!