2016-04-19 18 views
1

Heute war ich versucht, eine grundlegende Übung zu tun und ich in diesem Problem konfrontiert:Java Problem mit Eingabe

Exception in thread "main" java.util.InputMismatchException 
    at java.util.Scanner.throwFor(Unknown Source) 
    at java.util.Scanner.next(Unknown Source) 
    at java.util.Scanner.nextDouble(Unknown Source) 
    at Main.main(Main.java:14) 

Dies ist der Code:

import java.util.Scanner; 

public class Main { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     double salary = 0;  // Salary excluded tax 
     int tax = 0;   // % of tax 
     double taxTot = 0;  // amount of tax 
     double totSalary = 0; // Salary with tax 

     System.out.println("Salary, please : "); //Input salary 
     salary = input.nextDouble();  

     if (salary <= 15000) {       // <=15000 
      tax = 10; 
     } else if (salary>= 40000 && salary < 60000){  // >=40000 
      tax = 20; 
     } else {           // over > 60000 
      tax = 30; 
     } 

     taxTot = salary/100*tax; 
     totSalary = salary - taxTot; 
     System.out.println("Your tax is : " + taxTot + " Your salary : " + totSalary); 
    } 
} 
+1

ich kompiliert und lief das Programm. Ich habe keinen Fehler, als ich eine Nummer eingegeben habe. Bei der Eingabe eines Buchstabens habe ich jedoch denselben Fehler wie Sie, was nicht überraschend ist. Was ist dein Beitrag? – Gendarme

+0

Ich kann nicht scheinen, Ihr Problem zu replizieren. kopieren und einfügen und es funktioniert gut für mich. –

+0

Welche Art von Eingaben geben Sie beim Ausführen dieser Anwendung an? – LearningPhase

Antwort

1

Ein java.util.InputMismatchException kann, wenn die nächste geworfen bekommen Eingabe in der Scanner entspricht nicht dem Typ, den Sie versuchen, zu erhalten. Hier ein Beispiel:

Scanner input = new Scanner("hello"); 
double salary = input.nextDouble(); 

So ist das Problem höchstwahrscheinlich stammt aus der salary = input.nextDouble(); Linie in Ihrem Code, und die Ursache ist, dass Sie keine gültige double eingegeben haben.

Um das Verhalten Ihres Programms zu testen, können Sie die Eingabe in den Scanner Konstruktor schreiben, wie ich oben geschrieben habe. Sie können beispielsweise durch das Schreiben dieses testen können:

Scanner input = new Scanner("9000"); 

So wird das salary 9000, und so seit salary <= 15000, tax wird bis 10. Ändern Sie den Wert auf etwas anderes ein anderes Ergebnis zu bekommen eingestellt werden, Beispiel:

Scanner input = new Scanner("41000"); 

Wenn Sie mit der Arbeit mit einem Scanner bequem sind, können Sie die festen String-Parameter zurück zu new Scanner(System.in) ändern und Ihr vollständigen Programm ausführen.

+0

Ich habe versucht, wie Sie sagten, aber ich bekomme Fehler, wenn ich versuche, eine Dezimalzahl einzugeben, ich meine, wenn ich 13,548 eingeben, bekomme ich Fehler und das Programm zu stoppen. Wenn ich eine Integer-Zahl einstelle, funktioniert das Programm jedoch einwandfrei. – woft

0

Wenn Sie eine Lese durch diese haben es sagt Ihnen, über die InputMismatchException

Grundsätzlich ist die Eingabe in Ihrem Programm nicht den Scannertyp entsprechen. So könnten Sie den Fehler erhalten, weil Sie Ihre Eingabe keine Doppel

1

Versuchen zum Beispiel ist

Scanner scanner = new Scanner(System.in).useLocale(Locale.US); 

Es gibt einen Unterschied zwischen 5,0 und 5,0

+0

vielen Dank. Ich verstehe jetzt, wo das Problem war. – woft