特定数字检测器问题

时间:2014-04-19 19:46:56

标签: java string digit

我写了一小段代码,你可以通过命令行输入一个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(i)方法之后使用-48项,以使[]中的每个值等于我输入的实际数字。

例如我输入     java fivedet 505 并且没有-48数组a [] = {53,48,53}而不是[] = {5,0,5}我很遗憾没有足够的经验来编写java(开始学习3个月前)来理解为什么会这样。

我也想开发它以便能够检测不同的数字和不同长度的输入数字。

我很感激为何会发生这种情况。

2 个答案:

答案 0 :(得分:2)

减去48是一种从字符转换为整数的快速但有点混乱的方法。碰巧每个数字的字符代码与其数值相差48。

table of ASCII values。 (Java使用unicode,而不是ascii - 字符串在内部是UTF-16 - 但在这种特定情况下值是有效的)。所以字符'0'的值为48;字符'9'的值为57.

另一种方法是采用input的1个字符的子串,然后在该字符串上调用Integer.parseInt(),将“1”转换为1,将“2”转换为2,等等。 / p>

答案 1 :(得分:0)

您无需转换为int即可检测字符5.只需将它们计为字符即可。

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

    }

同样this question有很好的答案来计算字符串

中char的出现次数