2014-04-19 41 views
0

我寫了一小段代碼,通過命令行輸入3位數字,然後檢測代碼中有多少個5。特定數字檢測器問題

public class fivedet { 

    public static void main (String[] args) { 
     String input = args[0]; 
    int[] a = {0,0,0}; 
    int x = 0; 
    int y = 0; 
    int z = 0; 
    for(int i = 0; i<input.length();i++) { 
     a[i] = input.charAt(i) - 48; 
    } 
    if(a[0]==5) { 
     x=5; 
    } 

    if(a[1]==5) { 
     y=5; 
    } 

    if(a[2]==5) { 
     z=5; 
    } 

    System.out.println("5 digits here:" + x + y + z); 
} 
} 

我的主要問題是,爲什麼我所需要的input.charAt(ⅰ)方法之後-48術語,以便在[]的每個值等於實際數目I輸入。

例如我輸入 java fivedet 505 並且沒有-48數組a [] = {53,48,53}而不是[] = {5,0,5},我不幸沒有經歷過足夠編碼Java(3個月前開始學習)瞭解爲什麼會發生這種情況。

我也想開發它能夠檢測不同的數字和不同長度的輸入數字。

我很感激任何見解,爲什麼發生這種情況。

回答

2

減法48是一種快速但容易混淆的從字符轉換爲整數的方式。恰巧,每個數字的字符代碼與數字值相距48。

請參閱table of ASCII values。 (Java使用unicode,而不是ascii - 字符串在內部是UTF-16 - 但這些值在這種特定情況下是有效的)。所以字符'0'的值是48;字符「9」的值是57。

這樣做將是採取的input 1個字符的串,然後調用Integer.parseInt()該字符串,轉換爲「1」爲1,「2」至2的另一種方法,等等。

0

你不需要轉換爲int來檢測字符5.只要把它們算作字符。

for (char i : args[0].toCharArray()) { 
     System.out.print(i == '5' ? i : '0'); 

    } 

而且this question具有很好的答案來算一個字符的出現在字符串