0

I have an array list (below). The numbers of the list's equivalent char representation print out a secret message (which can be done through type casting). But before I read that, I need to add 5 to each element in the array list first. But I thought as the array is final that we could not change the string elements? (I did try making the array non-final, but still could not increment each value in the list by 5.) You can see the code I have tried to use below, but it still prints out the original values in the list. Does anyone have any pointers? thanks.

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 Answers 5

3

you are not changing the message array. you are just getting a temp value x for each element then increasing it. even if you tried it would show error as it is declared as final .

to increase the values you can do something like this

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; 
Sign up to request clarification or add additional context in comments.

Comments

0

you don't need that second loop:

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

In the first loop, you're change a variable (x) local to that loop. You're not actually modifiying the array contents like you seem to be expecting. In the second loop, that x variable is local to the second loop and completely distinct from the x of the first loop.

Comments

0

Try this

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] + ",");

Your code doesn't work because your x is a local variable in the for loop.

Comments

0

You are adding key in copy of element of array, which will not change value of actual element of array. instead do this.

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

More clarification

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

Comments

0

But I thought as the array is final that we could not change the string elements? I did try making the array non-final

You are getting confused between final and immutable :

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.