我希望我的数组num包含字符串b中的每个字符这样的:
num[0] = 9;
num[1] = 1;
num[2] = 1;
num[3] = 9;
但是不知怎么的9变成了57 1变成了1。我不明白为什么。当我打印出b.charAt(i)
的数字是正确的,但只要我尝试初始化数组的数字改变。我也试过用(int)b.charAt(i)
铸造,但这并没有什么不同。为什么数字会改变?
int a = 9119;
String b = a+"";
System.out.println(b);
int [] num = new int[b.length()];
String c = "";
for (int i = 0; i < b.length(); i++)
{
System.out.println(b.charAt(i));
num[i] = b.charAt(i);
//c += (num[i] * num[i])+"";System.out.println(c);
}
for (int w : num)
{
System.out.println(w);
}
控制台输出:
9119
9
1
1
9
57
49
49
57
注意char '9'不同于整型9,
char a = '9';
int b = a;
对于像这样的代码,它将通过字母'9'的ASCII码将char '9'自动转换为int,在ASCII表中,'9'是第57个字母,因此自动转换将让int b赋值给值57。与char '1'类似的想法,int ASCII表,数字是49。
使用num[i] = b.charAt(i);
行,您基本上将字符9
转换为其十进制表示形式,即57
。1
也是如此,其十进制表示为49
。
如果你把你的int[] num
变成char[] num
,一切工作如预期。另外,使用String.valueOf()
将int
转换为String
:
int a = 9119;
String b = String.valueOf(a);
System.out.println(b);
char[] num = new char[b.length()];
for (int i = 0; i < b.length(); i++) {
System.out.println(b.charAt(i));
num[i] = b.charAt(i);
}
for (char w : num) {
System.out.println(w);
}