2016-10-10 3 views
1
Java

Ich habe diesen Code:Der Scanner liest falsche Zahlen von Standard IO.

for (int i = 0; i < N; i ++) { 
    unos[i].x = input.nextDouble(); 
    System.out.println(unos[i].x); 
    unos[i].R = input.nextFloat(); 
    System.out.println(unos[i].R); 
} 

Wenn ich Eingang 2.177, unos [i] .x 2.177,0 sein wird, was es ist eindeutig nicht. Wenn ich 3.15 eintrage, gibt es mir Input Mismatch Exception. Was mache ich falsch?

+0

Sieht aus wie Ihr Gebietsschema "." Als Tausendertrennzeichen interpretiert. – QBrute

Antwort

1

Wenn ich Eingang 2.177, unos [i] .x 2177,0 wird

gut das ist, weil Sie verdoppelt mit einem locale lesen, wo Dezimalteil mit Koma statt Punkt.

Sie haben den Scanner zu sagen, wie die Dezimalstellen zu lesen ...

Ich meine, stellen Sie die locale

Beispiel:

Scanner scanner = new Scanner(System.in).useLocale(Locale.US); 
unos[i].x = input.nextDouble(); 
System.out.println(unos[i].x); 
+0

Es tut mir leid, wenn ich dich missverstanden habe, aber ich sollte Doubles lesen. 2.177 ist ein Double und ich brauche unos [i] .x 2.177, nicht 2177.0. unos [] ist ein Array der Unos-Klasse und Unos.x und Unos.R sind beide Doubles. – leonz

+0

jetzt bekomme ich es ... so verwenden Sie Punkt anstelle von Komma für den Dezimalteil .... –

+0

Jetzt habe ich die Antwort aktualisiert ... das Gebietsschema ist der Grund für das Problem ... werfen Sie einen Blick und lassen Sie mich kennt... –

0

InputMismatchException während Double Zahlen mit Scanner lesen können verursacht durch Ihre Gebietsschemaeinstellungen. In einigen Ländern ist das Dezimaltrennzeichen standardmäßig Komma anstelle von Punkt. Versuchen Sie, das US-Gebietsschema für Ihren Scanner einzustellen:

scanner.useLocale(Locale.US); 
Verwandte Themen