2015-01-17 2 views
-1

Я новичок в java. Я использую редактор java Eclipes. Когда я хочу, чтобы получить пользовательский ввод поплавком или двойного числа это даст ошибку вcan not input float number in java

Введите ваш номер: 3,1414

Исключение в потоке «главный» 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 myaaa.SubClass1.azizul(SubClass1.java:11) 
at myaaa.NewLife.main(NewLife.java:8) 

, что я должен делать. PLZ помощь. Я использую окна 8.1. благодаря

+3

Можете ли вы показать нам свой код? Я ценю, что вы новичок. – christopher

+0

Поскольку вы используете nextDouble(), не забыли ли вы его переместить в поплавок? '(float) sc.nextDouble();' – kirbyquerby

+0

Вероятно, вы не разбираете свой ввод. Убедитесь, что вы объявляете свою переменную float как таковую, и что пользовательский ввод также является поплавком. –

ответ

0
Scanner scan = new Scanner(System.in); 
    try { 
     float yourNumber = Float.parseFloat(scan.next()); 
    } 
    catch (NumberFormatException e){ 
     System.out.println ("not a float"); 
    } 
+0

'scan.next()' возвращает 'String', поэтому он не будет работать. 'Float.parseFloat (scan.next())' будет работать, хотя это намного проще, просто используя 'scan.nextFloat()' вместо этого ... – TNT

+0

Просто так мы поняли, 'scan.next()' возвращает String и будет генерировать то же самое исключение, которое получает OP. –

+0

[Java Scanner] (http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html) – roeygol

2

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

+0

Если разделитель между единицами и десятыми (десятичный разделитель) является запятой, период считается разделителем между группами из трех цифр: 1.234.567,8 составляет более одного миллиона, с 8 десятыми. (Это происходит из вашего параметра Locale.) Группа из четырех цифр (1414) приводит к этому исключению. – laune

0

вы можете использовать этот код, который лучше, чтобы получить то, что вам нужно, пока это не действительный

Scanner scan = new Scanner(System.in); 
boolean isDataValid = false; 

do { 
    System.out.println("Enter a float number: "); 
    try { 
     float yourNumber = Float.parseFloat(scan.next()); 
     isDataValid = true; 
    } 
    catch (NumberFormatException e){ 
     System.out.println ("The entered number is not a float, try again:"); 
     isDataValid = false; 
    }   
}while (!isDataValid); 
+0

Это может быть просто пример, но в чем смысл чтения пользовательского ввода, если область переменной 'yourNumber' ограничена блоком' try'? – Tom

+0

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

1

Вы можете гарантировать, что период (.) принимается в качестве десятичного разделителя по

Scanner scanner = new Scanner(System.in); 
scanner.useLocale(Locale.US); 
double d = scanner.nextDouble(); 
System.out.println(d < 10); 

Теперь 3.1414 принимается за номер менее 10, а 3,123 принимается за номер более трех тысяч.