Warum bin ich immer InputMismatchException?
Bisher habe ich dieses:
public double checkValueWithin(int min, int max) {
double num;
Scanner reader = new Scanner(System.in);
num = reader.nextDouble();
while (num < min || num > max) {
System.out.print("Invalid. Re-enter number: ");
num = reader.nextDouble();
}
return num;
}
und so:
public void askForMarks() {
double marks[] = new double[student];
int index = 0;
Scanner reader = new Scanner(System.in);
while (index < student) {
System.out.print("Please enter a mark (0..30): ");
marks[index] = (double) checkValueWithin(0, 30);
index++;
}
}
Wenn ich dies zu testen, kann es nicht die doppelte Anzahl, und ich bekam diese Meldung:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:909)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextDouble(Scanner.java:2456)
at MarkingSystem.checkValueWithin(MarkingSystem.java:25)
at MarkingSystem.askForMarks(MarkingSystem.java:44)
at World.main(World.java:6)
Java Result: 1
Wie kann ich dieses Problem beheben?
docs.oracle.com/javase/1.5.0/docs/api/java/util/... ansehen. Vielleicht war der scanner nicht in der Lage zu analysieren, was Sie eingegeben in der Konsole? Zum Beispiel, fragte Sie nach einer Zahl, die Sie eingegeben "Hallo"?
Versuchen Sie "nextFloat" statt.
Entfernen Sie Scanner reader = new Scanner(System.in); aus der askForMarks(); funktioniert Alles für mich.
check mein update.
Versuchen Sie "nextFloat" statt.
Entfernen Sie Scanner reader = new Scanner(System.in); aus der askForMarks(); funktioniert Alles für mich.
check mein update.
InformationsquelleAutor Trần Trung | 2012-12-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier sehen Sie die Natur von Scanner:
Versuchen, um die Ausnahme zu fangen
UPDATE
FALL 1
Ich versuchte Ihren code, und es gibt nichts falsch mit ihm. Ihrer Anreise, dass Fehler, da Sie eingegeben haben
String
Wert. Wenn ich in einen numerischen Wert, es läuft ohne Fehler. Aber sobald ich inString
esthrow
den gleichenException
die Sie in Ihrer Frage erwähnt.FALL 2
Den Sie eingegeben haben, etwas, was out of range wie ich oben erwähnt habe.
Ich bin wirklich Fragen, was Sie könnten versucht haben, zu geben. In meinem system, es läuft perfekt ohne änderung einer einzigen Zeile code. Kopieren Sie einfach wie Sie ist, und versuchen, kompilieren und ausführen.
Als Sie sagte, Sie habe versucht, geben
1.0
,2.8
usw. Bitte versuchen Sie es mit diesem code.Hinweis : Bitte geben Sie die Zahl eins nach dem anderen, auf separaten Zeilen. Ich meine, geben Sie
2.7
, drücken Sie die EINGABETASTE, und geben Sie dann die zweite Zahl (z.B.6.7
).kopieren Sie den ganzen code, und kompilieren und führen Sie es. Und, zu geben versuchen, eine Eingabe, die Sie versucht haben, früher. Auch, überprüfen Sie bitte mein Hinweis: auf der letzten meiner Antwort. Und, lassen Sie mich wissen.Wenn Sie die Lösung haben, dann lassen Sie mich auch wissen.
Ich denke, dass ich das problem gefunden, weil mein computer nur zu erkennen, das ',' als für den Bruch-Teil, während die Eingänge die ich verwendet werden, die mit '.', dies ist der Grund, warum es nicht funktionieren würde.
InformationsquelleAutor Ravi
Statt mit einem Punkt, wie: 1.2, versuchen Sie die Eingabe wie diese: 1,2.
.useLocale(Locale.ENGLISH)
InformationsquelleAutor linha9
Ich hatte das gleiche problem.
Seltsam, aber der Grund war, dass die Objekt-Scanner interpretiert Fraktionen je nach Lokalisierung des Systems.
Wenn die aktuelle Lokalisierung verwendet ein Komma getrennten teilen der Fraktionen, die Fraktion mit dem Punkt wird wiederum in Typ String.
Daher der Fehler ...
InformationsquelleAutor
Da Sie über die manuelle Eingabe der Nutzer-Schleife, nach dem scanner gelesen hat, Ihren ersten Eingang es wird passieren die Beförderung/Rückkehr in die nächste Zeile, die auch gelesen werden; das ist natürlich nicht das, was Sie wollte.
Können Sie versuchen, diese
oder alternativ können Sie verbrauchen, carriage return vor dem Lesen Ihre nächste Doppel-Eingang, durch den Aufruf
InformationsquelleAutor Infinity
Sind Sie Eingabe auf der Konsole ?
Dies ist die Rückkehr verdoppeln, wenn Sie geben Sie einfach die Zahl wie 456.
In den Fall, Sie geben Sie eine Zeichenfolge oder Zeichen, sondern werfen java.util.InputMismatchException, wenn es versucht zu tun, num = reader.nextDouble() .
InformationsquelleAutor chinmay.sagade