我写了一小段代码,你可以通过命令行输入一个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个月前)来理解为什么会这样。
我也想开发它以便能够检测不同的数字和不同长度的输入数字。
我很感激为何会发生这种情况。
答案 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的出现次数