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]

Categories

HOME
winforms
testng
amazon-ec2
image-processing
mediawiki
mfc
tesseract
setup-deployment
google-project-tango
pheatmap
gnupg
metatrader4
postgres-xl
vb.net-2010
dtrace
fallback
designer
serverless-framework
ghc
serilog
textfield
plunker
swiftlint
core-text
jndi
autosys
opennlp
pepper
fluentvalidation
strncpy
windows-server-2000
webkitspeechrecognition
newline
gsoap
binary-data
galsim
uisplitview
ioio
siesta-swift
perlin-noise
framemaker
mapbox-gl
nssegmentedcontrol
overlap
scaffold
hue
elasticsearch-plugin
gzipstream
google-closure
keydown
sas-jmp
wso2carbon
taffy
scrollable
osx-mavericks
parentheses
blogengine.net
integrity
togetherjs
mplayer
drupal-6
flow-control
mcafee
spring-mongodb
or-tools
thrust
google-web-starter-kit
xml-attribute
flash-cs5
bluemix-app-scan
suffix-tree
design-by-contract
tform
netmq
ios8-today-widget
spim
xna-4.0
ionic
fluid-dynamics
census
pretty-print
proj4js
streambase
geonetwork
python-green
modalpopup
camanjs
mdt
hippomocks
braille
geos
ms-project-server-2010
commoncrypto
interface-orientation
sharp-repository
e4x
nsnetservice
pendrive
vdsp
coredump
tomcat-valve
cinema-4d
gdlib
html-input
cxxtest
vc90
ext3
microsoft-virtualization
swing-app-framework

Resources

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
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App