2014-10-01 40 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 2014-10-01 21:18:50

+0

您应该阅读http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextFloat() – StackFlowed 2014-10-01 21:22:13

+0

感谢您的所有答案!它的工作,我会定义阅读该文件。 – Martin 2014-10-01 21:27:47

回答

0

取一个数字的日志(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++; 
} 

你将不得不也必须检查它实际上是一个数字

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); 
相关问题