### java

#### Could anyone explain how its work? [duplicate]

I'm trying to understand the following Java exercise. Even running the debugger I don't understand the details of the second and third printout: 1, 2, 3, 4 1, 2, 4, 4 1, 2, 4, 8 I understand that the first print is the array as it is, second line prints [2] element of the array and third line [3] element. Here is the code: public class TR1 { public static void main(String[] args) { int[] v = {1, 2, 3, 4 }; print(v); x(v, v[2] - 1); print(v); x(v, v[3] - 1); print(v); } public static void x(int array[], int y) { array[y] = array[y - 1] * 2; } public static void print(int array[]) { System.out.print(array[0]); for (int i = 1; i < array.length; i++) System.out.print(", " + array[i]); System.out.println(); } }

Let's see what this method does : public static void x(int array[], int y) { array[y] = array[y - 1] * 2; } It takes the value at index y-1, multiplies it by 2, then assigns this result to the index y . Starting array : {1,2,3,4} The call with v[2] - 1 takes the value at index 2 (which is 3), and substracts 1, so we have y = 2. From what we said before, the method takes the value at index 1 (y-1) which is 2, multiplies it by 2 so we get 4, and assigns that to the index 2 (y) . Current array : {1,2,4,4} The call with v[3] - 1 takes the value at index 3 (which is 4), and substracts 1, so we have y = 3. From what we said before, the method takes the value at index 2 (y-1) which is 4, multiplies it by 2 so we get 8, and assigns that to the index 3 (y) . Current array : {1,2,4,8}

Lets briefly walk you through the first things that happen. You start with this array: 1 2 3 4 No surprise when printing that. Then you run: x(v, v[2] -1 ) ... evaluates to x(v, 3 - 1) ... evaluates to x(v, 2) Which changes the array based on: array[y] = array[y - 1] * 2; Lets insert y as 2 (see above): array[2] = array[1] * 2; array[2] = 2 * 2; leading to: 1, 2, 4, 4 So, the real answer is: you don't even need a debugger. A piece of paper, a pen and a bit of thinking is even more efficient to uncover the "secrets" here.

print always prints the entire array. x and y are making changes to the array in between. Keep in mind that v[x] is just an integer. For example, v[2] is initialy just 3, so v[2] - 1 = 2. Hence it modifies v[2] between the first and second call to print.

### Related Links

Failed convert from multipartFile to Blob

Jenkins Slave Groovy definition: How to set “Usage” parameter

How can I use binary search to find Price in jTable?

byte-buddy throws java.lang.ClassNotFoundException: javax.servlet.http.HttpServlet

rubiks cube rotation algorithm

How to post/put a LIST of entities/ an EntitySet within Apache Olingo?

Clicking Link HTML in TextView

How to save my ListView when app closes

Interfaces Implementations used in Loop

Android Manifiest is not giving Google Maps the API key

How to fetch records based on bit masked value using hibernate?

Multi Thread chat program

WSO2 - Restrict concurrent login with same user simultaneously

How to authorize serviceaccount with OAuth 2.0 ClientId and without clientsecret value in client_secret.json file

Java Pack200 library output different from command line tool output

How to find all unique possible ways of partition from specific data given of an integer