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

displaying Java output text in a web browser
multidimensional array object memory location
Setting JDK for Eclipse [duplicate]
How to get all subdirectories excluding some subdirectories?
Parsing mysql console output [closed]
How to select text in an EditText and keep it selected on screen?
Supply browser with input stream for file download [closed]
Parse huge xml file to get distinct values from child tags — need best approach suggestions
Order of expression evaluation of string + int [duplicate]
Grails and spring security how to get composite id in controller?
How can I stop BufferedImage.getGraphics() opening an X11 device?
When we need to use curveTo() and setCurve()
Problems with 'if' statements
GLSL renders textures wrong
Layout doesn't show anything when updating from a java thread
Java Simple Reference : Error

Categories

HOME
ibm-bluemix
google-chrome-extension
vbscript
mediawiki
stock
hp-exstream
fme
filtering
malloc
callback
ezpublish
convolution
upload
esper
u-sql
qt-creator
zend-framework3
windows-phone-7
flask-wtforms
workload-scheduler
worldwind
database-replication
excel-vba-mac
viewport
dbext
clickonce
sylius
extjs5
devops
jndi
dxf
emgucv
angular2-aot
h2db
entitlements
windows-error-reporting
large-file-upload
react-chartjs
key-value-observing
repo
sequential
file-format
unspecified
greenrobot-eventbus
cookiecutter-django
ensembles
ncalc
pdf-reactor
powershell-dsc
turbogears
vao
scorm
auto-update
hls.js
gabor-filter
git-diff
lift-json
windows-mobile-6.5
sonarlint-vs
objective-c-swift-bridge
nxt
grails-tomcat-plugin
database-optimization
master-slave
rvest
bluemix-app-scan
design-by-contract
rtbkit
coveralls
kcachegrind
wyam
emailrelay
processmodel
web-controls
formatjs
nsbutton
asp.net-web-api-odata
poller
picturefill
fmod
batterylevel
hungarian-algorithm
tinn-r
cisco-jtapi
broken-links
invite
javax.script
inotifycollectionchanged
h.323
microsoft-virtualization
mdac
commodore
paul-graham

Resources

Encrypt Message