2017-02-19 61 views
1

Я довольно новичок в Java, и я делал простой калькулятор. Проблема в том, что когда мой номер ввода, например, «3.1», он дает ошибку исключения, но при написании «3,1» он работает просто отлично.Сканирование удваивается, когда я разделяю десятичные числа запятой или точкой

У моего друга, однако, есть несколько более продвинутый калькулятор (с синтаксическим разбором строк), и когда я запускаю его код, происходит обратное: 3,1 дает ошибку исключения, 3.1 работает отлично.

Я с нетерпением ждал, чтобы узнать, что вызывает эти разные поведения.

Я сделал эту простую сумму только сейчас, и то же самое происходит, я буду редактировать и поместить его калькулятор код через несколько минут

import java.util.Scanner; 

public class Tutorial_7 { 
    public static void main(String args[]){ 
     Scanner scan = new Scanner(System.in); 
     double num1, num2; 

     System.out.println("Introduza os dois números"); 

     System.out.println("1º: "); 
     num1 = scan.nextDouble(); 
     System.out.println("2º: "); 
     num2 = scan.nextDouble(); 

     System.out.println((num1 + num2)); 
     scan.close(); 
    } 

} 

Заключительный изменить: Он использовать Double.parseDouble(). Получил это, разница действительно в том, где она локализована. Должен был искать его, но никогда не слышал об этой концепции раньше.

Спасибо

+2

Не зная, что код выглядит для любого из этих реализаций, мы не можем ответить. Сожалею. –

+1

Прочтите документацию Scanner.nextDouble(): он говорит, что он делает. Прочтите документацию Double.parseDouble(), которую, вероятно, использует ваш друг): он говорит, что он делает. Один из них локализован, другой - нет, и все это задокументировано в javadoc. –

ответ

1

Поскольку вы используете разницу Local для этого можно сканировать с точкой ., а другой с запятой ,, чтобы исправить это вы должны зафиксировать один для сканера, как это:

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

Например:

  • Если вы используете Local.US вы должны проверить ваш двойник с . как 6.6
  • Если вы используете Locale.FRENCH Вам необходимо сканировать ваш двойной с , как 6,6