Hallo allerseits,
1)
Mit dem Scanner kann man mit nextInt() Zahlen eingeben.
Gibt man eine Zeichenkette von Ziffern ein, wird diese in den Tastaturpuffer geschrieben.
nextInt() wandelt diese Zeichenkette in eine Zahl um und _leert_ dabei den Tastaturpuffer.
2)
Gibt man dagegen keine Zeichenkette von Ziffern ein, wie z.B. "e" wird eine Exception erzeugt und der Tastaturpuffer - so meine Vermutung - dabei _nicht_ gelöscht.
Meine Vermutung kommt von dem Programm unten:
Wenn man z.B. die Zeichenkette "e" über Tastatur eingibt, so kommt man in eine Endlos-Schleife. Das Programm hält auch nicht mehr an, weil im Tastaturpuffer immer "e" steht.
3)
Ist meine Vermutung korrekt?
4)
Warum steht in der Doku von Oracle nichts von meiner Vermutung ?
5)
Gibt es eine offizielle Doku, in der diese Bugs von Java dokumentiert werden ?
6)
Auf der Seite:
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6351708
wird dieser Bug auch nicht aufgelistet.
7)
Ist die Seite
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6351708
eine offizielle Doku aller Java Bugs bzw. wo findet man so eine offizielle Doku ?
mfg
Ernst
=====================================================
1)
Mit dem Scanner kann man mit nextInt() Zahlen eingeben.
Gibt man eine Zeichenkette von Ziffern ein, wird diese in den Tastaturpuffer geschrieben.
nextInt() wandelt diese Zeichenkette in eine Zahl um und _leert_ dabei den Tastaturpuffer.
2)
Gibt man dagegen keine Zeichenkette von Ziffern ein, wie z.B. "e" wird eine Exception erzeugt und der Tastaturpuffer - so meine Vermutung - dabei _nicht_ gelöscht.
Meine Vermutung kommt von dem Programm unten:
Wenn man z.B. die Zeichenkette "e" über Tastatur eingibt, so kommt man in eine Endlos-Schleife. Das Programm hält auch nicht mehr an, weil im Tastaturpuffer immer "e" steht.
3)
Ist meine Vermutung korrekt?
4)
Warum steht in der Doku von Oracle nichts von meiner Vermutung ?
5)
Gibt es eine offizielle Doku, in der diese Bugs von Java dokumentiert werden ?
6)
Auf der Seite:
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6351708
wird dieser Bug auch nicht aufgelistet.
7)
Ist die Seite
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6351708
eine offizielle Doku aller Java Bugs bzw. wo findet man so eine offizielle Doku ?
mfg
Ernst
=====================================================
Java:
/*
P R O G R A M M D O K U M E N T A T I O N:
nextInt() liest aus dem Tastaturpuffer eine Zeichenkette wie z.B. "123"
und wandelt diese in eine ganze zahl um.
Wenn man allerdings eine Zeichenkette einliest, wie z.B. "e" oder "12x"
kann diese nicht in eine Zahl umgewandelt werden.
Dann wird eine Exception ausgelöst.
Problem:
beim Auslesen einer Zeichenkette, die nicht in eine Zahl umgewandelt werden
kann wie z.B. "e" wird dieser "Restmüll" NICHT aus dem Tastaturpuffer
entfernt. Deswegen kommt das Programm unten in eine Endlos-Schleife.
Offizieller, anerkannter Fehler, siehe:
[URL]http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6351708[/URL]
*/
package scannerproblem1;
import java.util.Scanner;
/**
*
* @author lzbarner
*/
public class Startklasse {
public static void main(String[] args) {
System.out.println("Eingabe Integer:");
System.out.println("Ihre Eingabe war: " + getInput());
}
protected static int getInput() {
boolean isCorrectInput = false;
int inputValue = 0;
Scanner sc = new Scanner(System.in);
while (!isCorrectInput) {
try {
// Bei einer Eingabe wie z.B. "e" wird dieser Schrott nicht
// aus dem Tastaturpuffer entfernt. Das Programm springt
// korrkterweise in den catch-Block. Danach kommt es wieder
// zu der Zeile: inputValue = sc.nextInt();
// Weil aber immer noch der Schrott "e" im Tastaturpuffer
// steht, muß das Programm nicht anhalten und auf eine neue
// Eingabe warten.
inputValue = sc.nextInt();
isCorrectInput = true;
} catch (Exception ex) {
System.out.println("Eingabe war nicht vom Typ Integer, bitte erneut
eingeben:");
// System.out.println("sc.Next()="+sc.next());
//ex.printStackTrace();
}
}
return inputValue;
}
}
Zuletzt bearbeitet von einem Moderator: