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

How to save data from MQTT subscribing to all topics
Unable to start server in spring mvc project with maven
Java: How to unit test a SwingWorker
Creating and calling custom exceptions
TransactionRequiredException Entitymanager refresh Entity
How can I extract java class files from features files - cucumber?
Posting an event from different thread with Guava EventBus
Chinese character strings transmitted between client and server garbled
org.apache.catalina.realm.JAASRealm.authenticate Unexpected error java.lang.IllegalArgumentException: wrong number of arguments
Why does Java require an explicit cast on a final variable if it was copied from an array?
How do I enable automatic JSON marshalling in Jersey using autodiscovery?
multi-thread run processes simultaneously
Viewing epub content with html pages and graphics in Java
incorrect handling of end document while using aaltoxml
Is this correct to pass this keyword as parameter for member objects creation in java?
JavaSpaces-like patterns in Ignite

Categories

HOME
cakephp
pandas
yii2
log4j
wso2-am
debugging
kde
smarty
view
q
react-redux
yarn
amortized-analysis
sharepoint-designer
win32gui
disassembler
angular-ui-bootstrap
facebook-messenger-bot
metatrader4
tomcat6
handsontable
alignment
remote-access
messages
percona
designer
vaadin7
graphlab
jtextfield
functional-testing
pass-by-reference
qhull
entitlements
replaceall
saas
libssl
lightswitch-2013
bosh
protovis
space-complexity
libraries
occlusion
code-search-engine
sharefile
vapor
greenrobot-eventbus
awt
ws-security
optix
bootstrap-dialog
checkboxlist
acoustics
reactive-cocoa-5
slick-3.0
qsslsocket
dds
multipeer-connectivity
setter
typed-lambda-calculus
sqlbulkcopy
bind9
firmata
home-directory
fputcsv
angstrom-linux
persist
goose
phpcas
historian
hsv
0xdbe
mmc
dundas
truevault
nsmutabledictionary
operator-precedence
gwidgets
gadt
terminfo
typeof
elliptic-curve
valueconverter
algebraic-data-types
intentservice
farseer
spring-io
ril
plasma
jelly
ticoredatasync
regsvr32
dotnethighcharts
removeclass
doh
heartbeat
file-comparison
calling-convention
celltable
mongomapper
remember-me
dmx512
photoshop-cs4
eqatec
text-coloring

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