2016-11-15 9 views
0

に私は電卓を作ってるんだが、私はスキャナ入力を使用してトラブルを抱えている、私は、二重などの変数を宣言したが、私が使用している場合、私はこのエラーを取得:JavaのinputMismatchExceptionは電卓

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 ProgramTUI.main(ProgramTUI.java:49) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:267) 

ここでコードは次のとおりです。

import java.util.Scanner; 
    public class ProgramTUI { 

    public static double add(double a, double b) { 

     return a+b; 
    } 

    public static double substract(double a, double b) { 

     return a-b; 
    }  

    public static double multiply(double a, double b) { 

     return a*b; 
    } 

    public static double divide(double a, double b) { 

     return a/b; 
    }  

    public static void main(String[] args) { 

     int choice; 
     double a, b; 

     System.out.println("1- Add"); 
     System.out.println("2- Sub"); 
     System.out.println("3- Mul"); 
     System.out.println("4- Div"); 
     System.out.print("Elige la operacion -"); 
     Scanner var = new Scanner(System.in); 

     choice = var.nextInt(); 
     System.out.print("Introduce el primer numero -"); 
     a = var.nextDouble(); 
     System.out.print("Introduce el segundo numero -"); 
     b = var.nextDouble(); 

     switch (choice) { 
      case 1: 
       System.out.print(add(a,b)); 
       break; 

      case 2: 
       System.out.print(substract(a,b)); 
       break; 

      case 3: 
       System.out.print(multiply(a,b)); 
       break; 

      case 4: 
       System.out.print(divide(a,b)); 
       break; 
     } 
    } 
} 

int型の数値では、プログラムは正常に動作しますが、var.nextDouble()でaとbを宣言しました。だから私は何が起こっているのか分からない。何でも入力がvar.nextDouble();

このためvar.nextInt();と、二重のためにint型として解釈することができない場合

Scanner var = new Scanner(System.in).useLocale(Locale.ENGLISH); 
+0

を解析することができますそれらはあなたのプログラムの中にありますか? – QBrute

+0

デバッグを試しましたか? – emotionlessbananas

+0

私は次のように入力します:1.5 –

答えて

0

は、私はあなたがこのような何かをしようと、間違った桁区切りを使用していると考えています別の数値形式を持つシステムロケールが原因である可能性があります。

あなたは英語の形式を強制的にこれを使用することができます:

Scanner var = new Scanner(System.in).useLocale(Locale.ENGLISH); 

それとも、文字列として番号を取得し、あなたが入力したとき、あなたの `double`sは次のようになりますどのような彼らに

 try 
     { 
     value = Integer.parseInt(value); 
     } 
     catch (NumberFormatException e) 
     { 
     conversionfailed = true; 
     } 
+0

これで解決しました!私がロケールなしで私たちにすべき小数点記号は何ですか? –

+0

カンマのように試してください。1,5 – bohuss

+0

うん、 "、"でもうまくいきます。 –

0

あなたのプログラムが失敗します。