将int添加到最终数组列表

时间:2014-02-28 04:41:02

标签: java

我有一个数组列表(如下)。列表的等效char表示的数字打印出一个秘密消息(可以通过类型转换完成)​​。但在我阅读之前,我需要先在数组列表中为每个元素添加5。但我认为因为数组是最终的,我们无法改变字符串元素? (我确实尝试使数组非最终,但仍然无法将列表中的每个值递增5.)您可以看到我尝试在下面使用的代码,但它仍然打印出列表中的原始值。有没有人有任何指针?感谢。

public static void main(String[] args) {
    final int[] message = { 82, 96, 103, 103, 27, 95, 106, 105, 96, 28 };
    final int key = 5;
    for (int x : message)
        x = x + key;
    for (int x : message)
        System.out.print(x + ",");
}

5 个答案:

答案 0 :(得分:3)

您没有更改消息数组。你只是得到每个元素的临时值x然后增加它。即使你尝试过它也会显示错误,因为它被宣布为最终版。

增加值,你可以做这样的事情

int[] message =
    {82, 96, 103, 103, 27, 95, 106, 105, 96, 28};
final int key = 5;
for (int i = 0; i< message.length; i++)
    message[i]+=key; 

答案 1 :(得分:0)

你不需要第二个循环:

for (int x: message) { x = x + key; System.out.print(x + ","); }

在第一个循环中,您将局部变量(x)更改为该循环。你实际上并没有像你期望的那样修改数组内容。在第二个循环中,该x变量对于第二个循环是局部的,并且与第一个循环的x完全不同。

答案 2 :(得分:0)

试试这个

final int[] message = { 82, 96, 103, 103, 27, 95, 106, 105, 96, 28 };
final int key = 5;
for (int i = 0; i < message.length; i++)
  message[i] += key;
for (int i = 0; i < message.length; i++)
  System.out.print(message[i] + ",");

您的代码不起作用,因为您的x在for循环中是local variable

答案 3 :(得分:0)

您正在添加数组元素副本中的键,这不会更改数组实际元素的值。而是这样做。

   for (int x =0; x < message.length; x++)
        message[x] = message[x] + key;
    for (int x : message)
        System.out.print(x + ",");

更多澄清

int value = message[0];
value = value+10; // This will not change value of element at message[0];

答案 4 :(得分:0)

  

但我认为阵列是最终的,我们无法改变   字符串元素?我确实尝试使阵列非最终

你在最终和不可变之间感到困惑:

final--> 1. For primitives : you can't change the value (RHS)
         2. For non-primitives : you can't reassign the reference to another object.
         2.b. You can change the value(s) of the object to which the reference is currently pointing.

immutable - you can't change the value of the object to which the reference is pointing.