2015-10-23 2 views
3

Я написал этот код: Для каждой строки он должен принять средневзвешенное значение этих чисел с весами 0,2, 0,4 и 0,4, и оно должно распечатать усредненное значение на отдельной строке на стандартном выходе , Для Например, для ввода нижес плавающим типом с. и,

45.00 67.00 98.00 
89.00 23.00 89.00 

он должен производить

75.00 
62.60 

Это работает, когда я пишу, например, 45,6, но это не делает, когда я пишу 45.6. Это мой код:

import java.util.Scanner; 

public class paket { 
    public static void main (String [] args){ 
     Scanner input=new Scanner(System.in); 
     float num1,num2,num3,result; 

     while(input.hasNext()){ 

      num1=input.nextFloat(); 
      num2=input.nextFloat(); 
      num3=input.nextFloat(); 

      result= (float) (num1*0.2+num2*0.4+num3*0.4); 

      System.out.println("Result is " +result); 
     } 
    } 
} 
+0

Запятая-период, что, вероятно, вызвано какой-то язык или локализации функции. Вероятно, вы установили, что ваш компьютер (или Java обнаружил что-то подобное) использовал запятые для разделения десятичных знаков от целых чисел. – Arc676

+1

Звучит как проблема локали. Либо измените свой язык системы, либо в вашем коде используйте «Locale.setDefault» (новый язык («en», «US»)); ' –

ответ

3

Изменить локаль перед разбором номера:

Locale.setDefault(new Locale("en", "US")); 
+0

Исключение в потоке« main »java.util.InputMismatchException \t at java.util.Scanner. throwFor (Неизвестный источник) \t на java.util.Scanner.next (Неизвестный источник) \t на java.util.Scanner.nextFloat (Неизвестный источник), но теперь у меня есть эта проблема – heyaa

+0

Где вы поместили инструкцию изменения локали? Вы должны установить его как первую инструкцию в главном. – Aurasphere

+0

Хорошо, я положил после сканера, теперь он решил. Большое вам спасибо! – heyaa

2

Вы должны использовать локаль при разборе, таким образом вы поддерживаете обоих. и, в зависимости от того, что выбрал пользователь:

NumberFormat format = NumberFormat.getInstance(Locale.getDefault());  
Number number = format.parse("1,234"); 
double d = number.doubleValue(); 
3

Сканер опирается на Locale, чтобы решить, как интерпретировать его вход. Как отмечали другие комментарии, вы работаете в системе, которая предполагает, что «,» - это десятичная точка, а не «.».

Вы можете изменить локаль ваш сканер «вход» используется с

input.useLocale(Locale.US); 

, чтобы он интерпретировать поплавки, как с помощью «» для десятичной точки.

Вы можете установить его обратно по умолчанию вашей системы с

input.reset(); 
Смежные вопросы