About Question enthuware.ocajp.i.v7.2.1114 :
Moderator: admin
Re: About Question enthuware.ocajp.i.v7.2.1114 :
I see now. The while is a never ending loop.
Re: About Question enthuware.ocajp.i.v7.2.1114 :
I understand that the while loop is an infinite loop. But since it calls getX() each time, shouldn't this lead to a StackOverflowError eventually?
-
- Site Admin
- Posts: 10054
- Joined: Fri Sep 10, 2010 9:26 pm
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
No, stack overflow occurs in recursion. i.e. when a method calls itself. That is not happening here.akassem wrote:I understand that the while loop is an infinite loop. But since it calls getX() each time, shouldn't this lead to a StackOverflowError eventually?
HTH,
Paul.
If you like our products and services, please help us by posting your review here.
-
- Posts: 12
- Joined: Sat Feb 22, 2014 3:55 pm
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
To check my understanding:
getX() will return 5 each time the condition in the while loop is checked. So, the condition 5 != 0 will be checked each time the while loop is executed, and will always be false - thus the infinite loop.
If int x = 0 is removed, x will eventually become 0, upon which the while loop terminates.
Correct?
getX() will return 5 each time the condition in the while loop is checked. So, the condition 5 != 0 will be checked each time the while loop is executed, and will always be false - thus the infinite loop.
If int x = 0 is removed, x will eventually become 0, upon which the while loop terminates.
Correct?
-
- Site Admin
- Posts: 10054
- Joined: Fri Sep 10, 2010 9:26 pm
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
Yes, that is correct.
If you like our products and services, please help us by posting your review here.
-
- Posts: 9
- Joined: Mon Apr 28, 2014 9:16 am
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
Hi,
Can you please illustrate what actually the local variable 'x' in method looper() do and its effect on while loop. Why while loop just stops if we remove int x = 0 from the lopper method(). I guess it is something related with shadowing of instance variable with local variable but couldn't get this point.
Can you please illustrate what actually the local variable 'x' in method looper() do and its effect on while loop. Why while loop just stops if we remove int x = 0 from the lopper method(). I guess it is something related with shadowing of instance variable with local variable but couldn't get this point.
-
- Site Admin
- Posts: 10054
- Joined: Fri Sep 10, 2010 9:26 pm
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
Did you read the explanation? It explains exactly what you are asking.
Also, please read the post by "crux terminatus" above.
If you remove the automatic variable x, then there will be no shadowing of the instance field x and x = m will affect the instance field x.Note that looper() declares an automatic variable x, which shadows the instance variable x. So when x = m; is executed, it is the local variable x that is changed not the instance field x. So getX() never returns 0. If you remove int x = 0; from looper(), it will print 0 and end.
Also, please read the post by "crux terminatus" above.
If you like our products and services, please help us by posting your review here.
-
- Posts: 8
- Joined: Thu Mar 24, 2016 12:02 pm
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
If local x to be changed to this.x, the code would print 0. Correct?admin wrote:Did you read the explanation? It explains exactly what you are asking.If you remove the automatic variable x, then there will be no shadowing of the instance field x and x = m will affect the instance field x.Note that looper() declares an automatic variable x, which shadows the instance variable x. So when x = m; is executed, it is the local variable x that is changed not the instance field x. So getX() never returns 0. If you remove int x = 0; from looper(), it will print 0 and end.
Also, please read the post by "crux terminatus" above.
Code: Select all
public class TestClass{
int x = 5;
int getX(){ return x; }
public static void main(String args[]) throws Exception{
TestClass tc = new TestClass();
tc.looper();
System.out.println(tc.x);
}
public void looper(){
int x = 0;
while( (this.x = getX()) != 0 ){
for(int m = 10; m>=0; m--){
[b]this.[/b]x = m;
}
}
}
}
-
- Site Admin
- Posts: 10054
- Joined: Fri Sep 10, 2010 9:26 pm
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
What happened when you tried it out?
If you like our products and services, please help us by posting your review here.
-
- Posts: 8
- Joined: Thu Mar 24, 2016 12:02 pm
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
It prints 0admin wrote:What happened when you tried it out?
-
- Posts: 14
- Joined: Mon Jun 20, 2016 11:16 pm
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
What will the following code print?
Hi,
i couldn't understand how if int x=0 is removed from looper(); method would result in printing 0 and end?Though i have seen the earlier posts i couldnt understand the replies.Please if anyone could help me.I am little new to JAVA.Thank you!
Code: Select all
public class TestClass{
int x = 5;
int getX(){ return x; }
public static void main(String args[]) throws Exception{
TestClass tc = new TestClass();
tc.looper();
System.out.println(tc.x);
}
public void looper(){
int x = 0;
while( (x = getX()) != 0 ){
for(int m = 10; m>=0; m--){
x = m;
}
}
}
}
Hi,
i couldn't understand how if int x=0 is removed from looper(); method would result in printing 0 and end?Though i have seen the earlier posts i couldnt understand the replies.Please if anyone could help me.I am little new to JAVA.Thank you!
Last edited by admin on Sun Jun 26, 2016 1:48 pm, edited 1 time in total.
Reason: Please put code within [code] [/code]
Reason: Please put code within [code] [/code]
-
- Site Admin
- Posts: 10054
- Joined: Fri Sep 10, 2010 9:26 pm
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
If you remove int x=0 from looper, there will be only one variable named x in the whole code and that is the instance variable x. This x will be modified in look by the statement x = m; At the end of the loop, x will be assigned 0.
If you like our products and services, please help us by posting your review here.
-
- Posts: 14
- Joined: Mon Jun 20, 2016 11:16 pm
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
Wow!Thank you .I understood it very well!
-
- Posts: 1
- Joined: Fri Aug 12, 2016 8:59 pm
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
I just wonder how this code will compile since x is an instance variable in the class. and the loop declare it with the same name? Is it work?
-
- Site Admin
- Posts: 10054
- Joined: Fri Sep 10, 2010 9:26 pm
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
What happened when you tried it out?
If you like our products and services, please help us by posting your review here.
-
- Posts: 2
- Joined: Fri Mar 17, 2017 1:24 pm
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
Why this code compiles and do not complain about unreachable System.out.println statement due to infinite loop.
-
- Site Admin
- Posts: 10054
- Joined: Fri Sep 10, 2010 9:26 pm
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
Compiler does not execute code. It does not know the value of the variables (unless they are compile time constants). So it does not know that it is an infinite loop.
If you like our products and services, please help us by posting your review here.
-
- Posts: 2
- Joined: Fri Mar 17, 2017 1:24 pm
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
Thanks a lot Enthuware. Cleared my certification 1Z0-803 . Tests helped me a lot. definitely a must have before actual exams!!!
-
- Posts: 66
- Joined: Mon Feb 20, 2017 12:31 pm
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
Hi!!
I would like to know if an infinite loop generate some kind of exception or error, is there no problem with the memory or the hard disk?
I would like to know if an infinite loop generate some kind of exception or error, is there no problem with the memory or the hard disk?
-
- Site Admin
- Posts: 10054
- Joined: Fri Sep 10, 2010 9:26 pm
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
A simple for loop that does not consume any memory can run forever -Javier wrote:Hi!!
I would like to know if an infinite loop generate some kind of exception or error, is there no problem with the memory or the hard disk?
for(;;);
If the loop consumes memory, of course, it will eventually cause OutOfMemoryError or StackOverflowError (if there is recursion involved).
If you like our products and services, please help us by posting your review here.
-
- Posts: 66
- Joined: Mon Feb 20, 2017 12:31 pm
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
Thank you so much Admin for your answer!!
Enthuware is great, I learnt a lot of with your explanations, I feel very confident to try to pass the OCA certificate.
Thank you guys!!
Enthuware is great, I learnt a lot of with your explanations, I feel very confident to try to pass the OCA certificate.
Thank you guys!!
-
- Posts: 8
- Joined: Tue Nov 07, 2017 8:23 am
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
Hi There
I'm finding the !=(Not equals) quite confusing .
The interpretation of the != operator is that , if values are not equal then the condition evaluates to true,
or evaluating to true if the values are different.
The while loop has the following condition : while(x = getX() !=0) .This implies 5 !=0 .So if I use the definition
of the != that says if values are not equal the condition evaluates to true ...why does the while loop evaluate
to false.
I'm finding the !=(Not equals) quite confusing .
The interpretation of the != operator is that , if values are not equal then the condition evaluates to true,
or evaluating to true if the values are different.
The while loop has the following condition : while(x = getX() !=0) .This implies 5 !=0 .So if I use the definition
of the != that says if values are not equal the condition evaluates to true ...why does the while loop evaluate
to false.
-
- Site Admin
- Posts: 10054
- Joined: Fri Sep 10, 2010 9:26 pm
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
You understanding is correct. while loop does not evaluate to false. It evaluates to true. Why do you think it evaluates to false here?
If you like our products and services, please help us by posting your review here.
-
- Posts: 221
- Joined: Mon Nov 26, 2018 2:43 pm
- Contact:
Re: About Question enthuware.ocajp.i.v7.2.1114 :
So the fact that the correct answer is that it will run forever and not throw an exception (OutOfMemeoryException) at run time, mean that neither the for loop nor the assignment within it (x=m) consume any memory?
Who is online
Users browsing this forum: No registered users and 39 guests