2016-11-15 4 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(); поэтому я не знаю, что происходит.

+0

Что ваши 'double's выглядеть, когда вы входите их в вашей программе? – QBrute

+0

Вы пробовали отлаживать? – emotionlessbananas

+0

Я ввожу их вот так: 1.5 –

ответ

0

Я считаю, что вы используете неправильный десятичный разделитель, попробовать что-то вроде этого:

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

Это решило! Каков десятичный разделитель, который я должен нам без Locale? –

+0

попробуйте запятую, например, 1,5 – bohuss

+0

Да, с "," работа тоже. –

0

программа Вы подведет, если все, что вы вводите не может быть истолковано как межд для var.nextInt(); и двойной для var.nextDouble();

Этом может быть связано с тем, что языковой стандарт системы имеет другой формат номера.

Вы можете использовать это, чтобы заставить формат английский:

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

Или вы можете получить номера в виде строк и анализировать их

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

 Смежные вопросы

  • Нет связанных вопросов^_^