### 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

Why is my random maze generation algorithm creating a pattern of columns at the bottom of my maze?

Method edit in class data access cannot be applied to given types

Java Regex for telephone number - Must Include only 8 digits with not more than 2 dash [duplicate]

Maven not calling testng parameters

How to copy jar-with-dependencies in my webapp\myfolder in maven Idea

Where can I add exception handling in a Java class definition?

Return count from ArrayList

When using different implementations of an interface, why can't I use their methods outside of these 'if' statements? [duplicate]

How can we maintain Immutability of a class with a mutable referrence

Adding default values in ArrayList

Does a method contain a race condition if it checks (independent) A and then acts on B?

thread sleep makes main server to sleep

Skip empty lines while CSV parsing

libGDX Actor not receiving input

Parameterizing/Sanitizing PreparedStatements that contain math functions and other columns

Why make singleton object private instead of public [duplicate]