【问题标题】:int array in java wont contain expected valuejava中的int数组不会包含期望值
【发布时间】:2021-12-15 08:36:52
【问题描述】:

我希望字符串 b 中每个字符的数组 num cosist 像这样:

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

【问题讨论】:

  • 整数9和ascii字符“9”不一样,你发现了。

标签: java arrays integer


【解决方案1】:

注意 char '9' 与 int 9 不同,

char a = '9'; 
int b = a;

对于这样的代码,它会自动将字符 '9' 通过字母 '9' 的 ASCII 码转换为 int,在 ASCII 表中,'9' 是第 57 个字母,所以自动转换将让我们的int b赋值为57。类似char '1'的思路,int ASCII表,数字是49。

【讨论】:

    【解决方案2】:

    使用num[i] = b.charAt(i); 行,您基本上是将字符9 转换为其十进制表示形式,即571 也是如此,其十进制表示为 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 2018-10-20
      • 1970-01-01
      • 2013-03-15
      相关资源
      最近更新 更多