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

App keeps on crashing when I click in element of recycleview
How can i make my code more enhanced? I am new to code standards and RCP development
Java RMI call slow first time
Specify multiple different policy files when invoking execution of an application in Java
Parse method of JsonParser drastically slow down my code
Smallest element array higher than average
Java how to start a game turn class for stored turn data
Passing function as a parameter from a function to a button (Android) [duplicate]
How to develop a Maven Multi-module application using the Spring Boot framework
Cursor Query app crashing
MySQL SQL Syntax error on GUI
Implementation of congruence in java
Attempt to invoke virtual method '…' on a null object reference [duplicate]
API 25 Changing language in APP
Non-blocking HTTP requests on HttpHandlers
Update object mapped to string using ObjectMapper

Categories

HOME
pycharm
raspberry-pi
programming-languages
amazon-ecs
cakephp-2.5
ip
fingerprint
acquia
multiple-records
floating-action-button
task
try-catch
undefined
beyondcompare
viewport
lldb
orleans
dxf
selectedindexchanged
elasticsearch-ruby
ping
msys2
c++-amp
create-table
karaf
http-get
framemaker
stringtemplate
hybridauth
normal-distribution
revolution-slider
suricata
file-format
x11-forwarding
streamreader
awt
mapzen
g-code
slick-3.0
scrollable
appcompat
ionicons
togetherjs
elgg
diagnostics
nodebb
crypt
typed-lambda-calculus
sybase-asa
abcpdf9
grails-tomcat-plugin
gridpane
elements
mathematica-frontend
gridview-sorting
disque
prettytensor
hill-climbing
packagist
dlna
photobucket
javax.sound.midi
pervasive-sql
lib.web.mvc
jmeter-maven-plugin
deis
responsive-images
sysinternals
createprocessasuser
fluid-dynamics
generic-programming
web-controls
block-device
ng-animate
nstableviewcell
android-nested-fragment
device-manager
neolane
project-planning
starcluster
industrial
spring-io
dataadapter
smtp-auth
drools-planner
cisco-jtapi
uiviewanimation-curve
asyncfileupload
zpt
psi
zend-translate
gallio
web-application-design
exchange-server-2003
noscript

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