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

Add qualified class to Java comment instead of importing the class
Got 404 error on tomcat 7.0.47 websocket
Maven Java Project Only Working Once
drag object using mouse Listener
How to remove 2 or more spaces that are next to each other from a char array
Java int array incremented with start and end points
Another Comparison method that violates its contract [duplicate]
FTP proxy design: how to shutdown data channel properly at client side
NullPointerException at mapFragment.getMapAsync
Cannot create ActiveMQ queue or send a message using java
Type of constant expressions in Java [duplicate]
Hazelcast MapStore Load with TTL
Dynamic TableView in Javafx
java FX VBox layout
Java Load Class Dinamically in ChildClassLoader related to SystemClassLoader
Describing all existing elements of a class from another class

Categories

HOME
java
vim
jdo
coq
amazon-ec2
zeromq
azure-data-factory
drivers
cvs
malloc
jsrender
packages
umd
ojdbc
uber-api
podio
adfs
iggrid
windows-10-universal
floating-action-button
messages
saxon
facebook-page
pythonanywhere
swingx
visjs
tapestry
google-search-api
wijmo
firebase-crash-reporting
skia
gtrendsr
webtest
accelerate-framework
abstract-class
opshub
avro4s
jvm-languages
eclipse-gef
apple-news
chain-builder
jquery-validate
ionicons
alphabet
hls.js
return-value
nativeapplication
diagnostics
pdfclown
spring-mongodb
webdriverjs
sonarlint-vs
orthogonal
objective-c-swift-bridge
jquery-filter
ado.net-entity-data-model
file-writing
skobbler-maps
google-web-starter-kit
paypal-express
fuzzy-search
nsviewcontroller
moveit
rvest
independentsoft
photobucket
uid
separator
kcachegrind
angular-leaflet-directive
riak-cs
tablelayout
markers
google-reader
starcluster
jubula
mysql-error-1062
datagridviewcolumn
resty-gwt
dexterity
cos
shellexecute
pushbackinputstream
sabredav
mt
bluepill
genshi
coercion
javax.script
yetanotherforum
disclosure
gdlib
yslow
filtered-index
firefox-5
sef
kdbg
mtj
scripting-languages





Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm