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

Saving POST request during external authentication
Calling other methods to main in java
`createSQLException` when trying to get all rows in MySQL table
Understanding the logic of this remove method in Java
Time Complexity of get operation on Google Protobuf deserialized repeated object
Sending HTTPS GET request from android to python is not working
How do you execute cURL statements in java to fetch JSON from kibana
Constructor for a class whose super should only be made via factory method
Introducing EhCache broke web app (no error message)
Java String Error Out Of Bounds
Playframework 2.5 SQL error or missing database (no such table: information_schema.sequences)
ClassCastException Error while dynamically loading classes from a JAR file outside WAR at run time in JAVA?
Java: How to get the jdbc oracle driver after download by user?
Configuration for creating multiple instances of hazelcast in a single JVM
How to add a Intellij project to netbeans
Exception while loading Java access bridge though java agent

Categories

HOME
log4j
mediawiki
homebrew
umd
disassembler
ebean
networkx
reveal.js
quicklook
dynamics-crm-online
try-catch
iolanguage
graphlab
alpine
mmap
captiveportal
dxf
android-widget
selectedindexchanged
wpfdatagrid
skia
tinymce-4
key-value-observing
.net-4.0
ioio
vsts-build-task
subset-sum
language-concepts
amazon-kinesis-kpl
wpf-controls
file-format
gesture
reportbuilder
trim
g-code
dynamic-reports
checkboxlist
eclipse-gef
fault
blogengine.net
tropo
setter
nodebb
windows-iot-core-10
dynamics-sl
sonarlint-vs
mediaelement
eventkit
google-cdn
instant
httplistener
bstr
moveit
skype4py
bgp
photobucket
uid
pervasive-sql
kcachegrind
browser-bugs
ideamart
appfabric-cache
fluid-dynamics
mmc
remobjects
p2
sonarqube5.1.2
jsapi
java.util.concurrent
socketexception
onactivityresult
php-5.4
reactfx
seaside
mbr
terminal-services
dir
runtime.exec
shellexecute
gridcontrol
specification-pattern
distutils
referrer
tinn-r
rdoc
manchester-syntax
dsn
newtonscript
osql
enter
whoosh
qt-jambi
hamachi
xmemcached
android-sdk-2.1
xfbml
gallio
jquery-ui-droppable
multi-tier
ctp4

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