2014-10-01 46 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); 
相關問題