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

Java StreamCorrupted Exception, using JSON
jdbc connection with sql server in fragment (android)
Java/libGDX - issues with Actions.fadeIn() and Actions.fadeOut()
context:property-placeholder does not work for properties on a JaxWsPortProxyFactoryBean bean
JOOQ get POJO object with another POJO - foreign key in table
some functions are not working as intended
Does JNI requires ordering of arguments based on argument types
Is there any library in java that helps to create custom query language like SQL?
Weird bit values from MySQL table
Webdriver - Unable to locate element (Java)
Text check in every page (Selenium)
Drawing a two colored checker board with nested for loops where each square being their own object (Java)
Efficient primitive array decoding with Apache Avro
Creating a new intent inside a for loop good or bad?
How to embedd Camunda engine and admin/tasklist/cockpit with my own Spring Security webapp?
Get events from Google Calendar on Android

Categories

HOME
vim
asp.net-core
keycloak
omnet++
fluentd
relative-path
hp-exstream
rsyslog
filtering
graphql
opengl-es-2.0
portia
session-variables
kentor-authservices
jplayer
orchardcms
iolanguage
reactcsstransitiongroup
connection-string
shared-hosting
emulator
visjs
object-detection
abi
intentfilter
functional-testing
csrf-protection
chromium-embedded
dxf
crystal-reports-2010
shopware
numerical-methods
fish
status
elasticsearch-net
opentype
frame
google-cloud-endpoints-v2
google-sites-2016
ghost4j
libraries
splice
dism
ncalc
reportingservices-2005
isbn
businessworks
jsch
python-c-api
hendrix
dandelion
aurelia-validation
carrot
pdfclown
dwscript
abcpdf9
slicknav
contact-list
ready-api
captivenetwork
dataview
pagerank
rhino-servicebus
spim
google-places
sdhc
cannon.js
metaclass
libressl
iis-arr
graph-drawing
sankey-diagram
umbraco6
dia
ng-animate
gulp-less
poller
typo3-neos
qt-faststart
yui-compressor
android-screen-support
html-editor
smtp-auth
kyotocabinet
quickdialog
funscript
word-processor
ticoredatasync
pendrive
punbb
pyinotify
datareader
xsdobjectgen
castle-monorail
nintendo-ds
uimenucontroller
lzh

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