尝试读取输入时Java出错

时间:2014-10-01 21:15:40

标签: java java.util.scanner inputmismatchexception

此程序应计算数字中的位数 这是我的代码:

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 个答案:

答案 0 :(得分:0)

输入数字时,除非您希望将其拆分,否则不应包含逗号。如果你想要一个小数,请使用"。"代替。如果您想要一个大于999的数字,请不要包含逗号

答案 1 :(得分:0)

取一个数字的log(base10)并加1表示无论如何都不会给出输入数字位数的正确答案。

您给出的11111.465示例有8位数字。这个数字的log10是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++;
}

你必须通过检查它的模式来检查它实际上是一个数字......

答案 2 :(得分: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);