2014-09-26 31 views
0

我想寫一個代碼塊,我在一個數字中找到並找到該數字中最大的數字。 (例如,12345將是5並且791將是9)。但是,當我在main()中放入我的掃描器方法時,我得到一個錯誤java.lang.NumberFormatException並且不知道該怎麼做。Java最大數字(java.lang.NumberFormatException)

import java.util.Scanner; 

public class Step2 { 

    private static int greatestnum = 0; 
    private static int length = 0; 
    private static int step = 0; 

    public static void main(String[] args){ 
     Scanner r = new Scanner(args[0]); 
     String s = r.next(); 
     int t = Integer.parseInt(s); 
     System.out.println(maxDigit(t));  
    }    

    public static int maxDigit(int num){ 
     num = Math.abs(num); 
     String stringint = String.valueOf(num); 
     length = stringint.length(); 
     String[] ary = stringint.split(""); 
     while (step < length){ 
     int currentnum = Integer.parseInt(ary[step]); 
      if(currentnum >= greatestnum){ 
       greatestnum = currentnum; 
      } 
      step++; 
     } 
     return greatestnum; 
    } 

} 

我真的可以使用一些幫助,我必須遞歸地做同樣的事情,不知道我做錯了什麼。

回答

0

Integer.parseInt如果無法將字符串轉換爲整數,則拋出NumberFormatException。在你的情況下,我會檢查s的輸入值。

的JavaDoc Integer.parseInt(String s)

例子

Integer.parseInt(" 234"); ---> Throws NumberFormatException as it has space 
Integer.parseInt(""); ---> Throws NumberFormatException as it is not parseable for an integer 
Integer.parseInt(null); ---> Throws NumberFormatException and not npe 
Integer.parseInt(" 234 ".trim()); ---> Doesnt throw NumberFormatException as it trims before trying to parse it. 

我會嘗試

int t = Integer.parseInt(s.trim()); 

這將清除NumberFormatException異常。

至於你的問題的其他部分,這是一個非常糟糕的努力。 請閱讀Java文檔的拆分字符串。 stringint.split( 「」);你用什麼拆分字符串?

您應該使用模運算符。那是 %。 使用5%2將返回1這是其餘

,如果你在一個循環中

public static int maxDigit(int num){ 
    int maxDigit=0; 
    while(num>0) { 
     if(maxDigit<num%10){ 
      maxDigit=num%10; 
     } 
     num/=10; 
    } 
    return maxDigit; 
} 

做這樣的事情的maxDigit將有你需要的東西。這是一個循環的方法嘗試遞歸你的自我展示我會竭盡全力幫助你,如果我看到努力的努力。

+0

不,我仍然得到同樣的錯誤方法 – user3483844 2014-09-26 18:19:08

+0

什麼是S的值?你可以做System.out。println(「s is:」+ s); – StackFlowed 2014-09-26 18:20:31

+0

所以,我在eclipse上運行這個,我在這個類的run-as屬性下進行,並將參數放在參數部分「12345」下面,這樣我的掃描器就會把這個值放到s中,然後將s到存儲在t中的整數12345,然後取t並插入到maxDigit並打印出來。 – user3483844 2014-09-26 18:21:49

1

試試這個:

private static int greatestnum = '0'; 

public static void main(String[] args){ 
    Scanner r = new Scanner(args[0]); 
    String s = r.next().trim(); 
    char c[] = s.toCharArray(); 
    for (int i = 0 ; i < c.length ; i++) { 
     if (c[i] > greatestnum) { 
      greatestnum = c[i]; 
     } 
    } 
    System.out.println(greatestnum-48); 
} 

說明

  • 的字符串是一個字符
  • 每個角色都有一個代碼( '0',...,「序列9 '按這個順序存儲=>'0'<'9')
  • 如果你想取回數字,你需要從該char代碼中刪除48個
+0

這是非常複雜的簡單邏輯,絕不是這是一個錯誤的答案,但它太複雜了。 OP是初學者,您可能想要添加爲什麼是-48和ASCII值的簡要說明。而不僅僅是「如果你想取回數字,你需要從該char代碼中刪除48個」 – StackFlowed 2014-09-26 18:44:13

1

下面有代碼可以輸入任何輸入,只檢查數字。

Scanner r = new Scanner(args[0]); 

    char max = '0'; 

    // for all tokens in input string 
    while (r.hasNext()) { 

     // next token (whatever it is) 
     String token = r.next(); 

     // iterate thru all chars in this token 
     for (int i = 0; i < token.length(); i++) { 
      char c = token.charAt(i); 
      if (Character.isDigit(c) && c > max) { 
       max = c; 
      } 
     } 
    } 

    // print max found digit 
    System.out.println(max); 

樣品結果:

input: 2348343 
output: 8 

input: a brown fox 145 jump 71 over 
output: 7