Ошибка в 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)
Есть идеи о том, в чем проблема?
3 ответа
Взятие журнала (base10) числа и добавление 1 не даст вам правильного ответа на количество цифр введенного числа в любом случае.
Ваш приведенный пример 11111.465 имеет 8 цифр. Лог10 этого числа 4.045... добавив 1, вы получите ответ 5.
Другой пример: 99, Log10(99) = 1,99, приведенный к типу int = 2, добавьте 1 = 3... ясно, что это только 2 цифры.
Вы можете просто прочитать ввод как строку, а затем сделать что-то вроде следующего
int count = 0;
String s = /* (Input Number) */
for(char c : s.toCharArray())
{
if(Character.isDigit(c))
count++;
}
Вы должны также проверить, действительно ли это число, проверив его шаблон...
При вводе числа вы не должны включать запятые, если не хотите разделить его. Если вы хотите десятичную дробь, используйте "." вместо. Если вы хотите число больше 999, не используйте запятую
Как говорили многие люди, запятая вас портит.
Один из вариантов, который вы можете рассмотреть, если вашему вводу нужна запятая, это замена запятых во входной строке, прежде чем пытаться посчитать количество цифр.
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);