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

Failed convert from multipartFile to Blob
Jenkins Slave Groovy definition: How to set “Usage” parameter
How can I use binary search to find Price in jTable?
byte-buddy throws java.lang.ClassNotFoundException: javax.servlet.http.HttpServlet
rubiks cube rotation algorithm
How to post/put a LIST of entities/ an EntitySet within Apache Olingo?
Clicking Link HTML in TextView
How to save my ListView when app closes
Interfaces Implementations used in Loop
Android Manifiest is not giving Google Maps the API key
How to fetch records based on bit masked value using hibernate?
Multi Thread chat program
WSO2 - Restrict concurrent login with same user simultaneously
How to authorize serviceaccount with OAuth 2.0 ClientId and without clientsecret value in client_secret.json file
Java Pack200 library output different from command line tool output
How to find all unique possible ways of partition from specific data given of an integer

Categories

HOME
ionic-framework
google-chrome-extension
hive
cloud
openmp
keycloak
urbancode
image-processing
plot
platform-builder
spagobi
read-eval-print-loop
spring-cloud-stream
amazon-ecs
azure-media-services
constraint-programming
webrequest
iggrid
tomcat6
modx-revolution
ups
saxon
sms-gateway
text-rendering
visual-composer
textfield
crosstab
p-value
buildbot
fish
url-scheme
fluentvalidation
jaxb2
nameservers
bosh
fog
copying
serverside-rendering
streamreader
email-templates
fakeiteasy
outlook-api
hibernate-tools
revapi
ionicons
jlink
dotnetzip
integrity
recursive-datastructures
feeds
np-complete
spring-mongodb
query-performance
chord-diagram
static-ip-address
instant
azure-sdk
rotativa
android-textview
azure-virtual-network
mikroc
multiple-regression
python-stackless
wapiti
hsv
qdialog
django-unittest
citrus-pay
iis-arr
computer-algebra-systems
tarjans-algorithm
android-listview
dereference
apache-commons-net
system.reflection
jsonpickle
codeigniter-url
tablelayout
googlemock
google-reader
expected-exception
geos
listings
easy-install
excel-2003
type-equivalence
angularjs-controller
typoscript2
javaspaces
ticoredatasync
gwt-ext
gnu-prolog
javax.script
calling-convention
gdlib
mysql-error-1005
paster
modelstate
preference
audio-capture
backcolor
adrotator
mtj
virtual-functions
phonon
pascal-fc
genealogy

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