我有一个数组列表(如下)。列表的等效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 + ",");
}
答案 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.