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

Buttons in JFrame, access to methods in AbstractTableModel
Action is not getting called in Struts 2
Drawing lines in GUI with arrow keys using keylistener in Java
Jetty Seems to Ignore Port Argument
Java int operation in Javascript
How to get ResultSet from executeBatch?
How to pass an ArrayList from one jsp to another using session
Simple Java Graphic Program Not Displaying
How can I get the bytecodes that are executed at runtime for a Java program?
Method calling itself.. recursive?
How to turn Website into Android App [closed]
capturing location from smartphone on PC - Java
Android Annotations Custom View
Best way to increase counter in Java and C++? [duplicate]
Store password within app
How to render colours properly in Java Graphics

Categories

HOME
compiler-construction
keycloak
isabelle
bpmn
react-router
adb
electronics
packages
v8
dxl
indesign
slurm
slick-slider
node-pdfkit
handsontable
orchardcms
iron-router
worldwind
transformation
custom-wordpress-pages
zurb-foundation-6
numerical-methods
assistant
jaxb2
data-manipulation
stringtemplate
ghost4j
atl
html5-fullscreen
wixsharp
overlap
hockeyapp
withings
unspecified
ssjs
reportbuilder
nomethoderror
mime
filepicker
termination
strptime
rails-routing
clean-architecture
domain-model
integrity
aurelia-validation
tactic
snmptrapd
python-cryptography
sqldf
smart-table
thrust
plottable.js
autorest
gstreamer-0.10
actionbardrawertoggle
python-stackless
dlna
associative-array
historian
javax.sound.midi
teamcity-8.0
python-3.2
atk4
fouc
citrus-pay
deis
twirl
fluid-dynamics
pretty-print
bridge.net
directoryservices
jsonpickle
angularjs-ng-click
cdt
javafx-webengine
gulp-less
markers
yorick
valueconverter
monomac
coverflow
opcache
jquery-mobile-dialog
orchardcms-1.7
smtp-auth
jquery-knob
bitsharp
manchester-syntax
reddot
nsdatecomponents
gcj
horizontal-accordion
javax.script
calling-convention
actionview
webkit.net
iweb
aquaticprime
ajax-forms

Resources

Encrypt Message