我编写了一小段代码,您可以通过命令行输入一个 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 项,以便 a[] 中的每个值等于我输入的实际数字。
例如我输入 java 505 没有 -48 数组 a[]={53,48,53} 而不是 a[]={5,0,5} 不幸的是,我对 java 编码没有足够的经验(3个月前开始学习)来理解为什么会发生这种情况。
我也确实希望开发它能够检测不同的数字和不同长度的输入数字。
如果您能了解为什么会发生这种情况,我将不胜感激。
最佳答案
减去 48 是一种快速但有点令人困惑的从字符转换为整数的方法。恰好每个数字的字符代码与其数值相差 48。
查看此table of ASCII values 。 (Java 使用 unicode,而不是 ascii - 字符串内部是 UTF-16 - 但这些值在这种特定情况下是有效的)。所以字符“0”的值为 48;字符“9”的值为 57。
另一种方法是获取 input
的 1 个字符子字符串,然后对该字符串调用 Integer.parseInt()
,将“1”转换为 1 、“2”到 2 等等
关于java - 特定数字检测器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23174697/