2010-08-16 5 views
3

Этот код работает отлично, когда вы набираете 22 и 56, например, он показывает вам правильный результатФункция для вычисления с десятичными числами в Java

import java.util.Scanner; 

class apples{ 
    public static void main(String args[]){ 
    Scanner villy = new Scanner (System.in); 
    double fnum, snum, answer; 
    System.out.println("Enter first num: "); 
    fnum = villy.nextDouble(); 
    System.out.println("Enter second num: "); 
    snum = villy.nextDouble(); 
    answer = fnum + snum; 
    System.out.println(answer); 
    } 
} 

но при попытке поставить десятичные, например, 23.53 и 42.76 его по терпит неудачу за исключением следующего (см screenshot):

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 apples.main(apples.java:8) 

ответ

1

Вы случайно на компьютере, отличном от английского? Например, с французским или немецким языком вам необходимо ввести 23,53, а не 23.53.

Языковой стандарт по умолчанию для сканера - это то, что возвращает Locale.getDefault(): на английском компьютере он должен возвращать Locale.ENGLISH. Вы можете установить локаль на английский язык, делая это:

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

Это хороший момент. – CoolBeans

+0

это работает, спасибо Самуэль – user407589

0

следующий фрагмент кода работает отлично. Ваша проблема должна лежать в другом месте. Что вы подразумеваете под словом «это не удается»? Предоставляет ли вам сообщение об ошибке или исключение?

double fnum=0, snum=0, answer = 0; 
fnum=23.53; 
snum=42.76; 
answer=fnum+snum; 
System.out.println("answer="+answer); //prints 66.28999999999999 
+0

Да, он дает мне сообщение об ошибке, см. Ссылку со снимком экрана – user407589

+0

Должно быть, что-то не получается. Когда я запускаю ваш код, он отлично работает. Смотрите мой выход из кода ниже: - Введите первый Номер: 23,53 Введите вторую Num: 42,76 66,28999999999999 – CoolBeans

+0

я положил этот Nº и дает мне ту же ошибку .. что-то странное происходит с Eclipse, в моем компьютере,. несколько часов назад я открыл еще одну тему, что у меня проблемы с некоторыми конкретными кодами. – user407589

1

Ознакомьтесь с описанием API вашего исключения.

Класс InputMismatchException:

Метательное с помощью сканера, чтобы указать, что маркер извлекается не соответствует шаблону для ожидаемого типа, или, что маркер находится вне диапазона для ожидаемого типа

Вы, скорее всего, не будете кормить в ожидаемом вами входе; во всяком случае, «следующий» элемент сканера в какой-то момент не является двойным.

Глядя на ваш скриншот, вы, кажется, используете API правильно. Я подозреваю, что встроенная консольная поддержка Eclipse не делает то, что ожидает сканер. Попробуйте изменить первую строку методы:

Scanner villy = new Scanner("23.53\n42.76\n"); 

Это должно быть функционально идентично тому, что вы получите от входного потока; если это работает, то это говорит о том, что проблема связана с входом Eclipse.

Одна вещь попробовать, которая всегда является хорошей идеей в целом, заключается в явном определении кодировки входного потока. То, что вы хотите отправить, - символов, но то, что вы на самом деле отправляете, - байт. Если Eclipse использует необычную кодировку символов, а сканер по умолчанию угадывает другой, вы столкнулись с проблемами. Указание фактической кодировки в конструкторе сканера устранит эту возможность.

Другим вариантом является то, что язык, на котором работает Java, фактически использует запятую в качестве разделителя десятичных чисел. Если это так, то сканер прав, вы не указали двойную правильно (хотя это также должно завершиться неудачей на примере с String).

+0

x10 Andrzej, thanks – user407589

1

Вы, вероятно, напечатал запятой вместо периода при вводе номера. Это вызовет исключение InputMismatchException. Я запустил код, и он отлично работает с правильно введенным вводом, но бросает InputMismatchException, когда я заменяю период любым другим символом.