2014-10-01 2 views
0

Эта программа должна подсчитывать количество цифр в числе.
Вот мой код:Ошибка в Java при попытке чтения ввода

import java.util.Scanner; 

public class Converter { 
    public static void main(String[] args) { 
     Scanner marty = new Scanner(System.in); 
     float sk; 

     System.out.println("Enter start number: "); 
     sk = marty.nextFloat(); 

     int numb = (int)Math.log10(sk)+1; 
     System.out.println(numb); 

     marty.close(); 
    } 
} 

Я получаю такого рода ошибки, в то время как на вход пытаюсь число с 4 или более цифр до запятой, как 11111,456:

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.nextFloat(Unknown Source) 
at Converter.main(Converter.java:11) 

Любые идеи о в чем проблема?

+0

Вероятно, вам нужен '.', а не', 'как десятичный разделитель. – njzk2

+0

Вы должны прочитать http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextFloat() – StackFlowed

+0

Спасибо за все ответы! Это сработало, я обязательно прочитаю этот документ. – Martin

ответ

0

Взятие журнала (base10) номера и добавление 1 не даст вам правильного ответа на количество цифр номера входа в любом случае ,

Ваш пример 11111.465 имеет 8 цифр. Log10 этого номера составляет 4.045 ... добавление 1 дает вам ответ 5.

Другой пример: 99, Log10 (99) = 1,99, отлитый как int = 2, add 1 = 3 ... ясно всего 2 цифры.

Вы можете просто прочитать входные данные как строки, то сделать что-то вроде следующего вместо

int count = 0; 
String s = /* (Input Number) */ 
for(char c : s.toCharArray()) 
{ 
    if(Character.isDigit(c)) 
     count++; 
} 

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

0

При вводе номера вы не должны включать запятые, если не хотите разбить его. Если вы хотите десятичное число, используйте «.». вместо. Если вы хотите число больше 999, не включайте запятую

0

Как и многие люди, запятая вводит вас в заблуждение.

Один из вариантов, который вы можете рассмотреть, если ваш ввод требует запятой, заменяет запятую на входной строке, прежде чем пытаться подсчитать количество цифр.

System.out.println("Enter start number: "); 
String input = marty.nextLine(); 

float sk = Float.parseFloat(input.replace(",", ".")); // use input.replace(",", "") if you want to remove commas 

int numb = (int)Math.log10(sk)+1; 
System.out.println(numb);