Recording all values of the variables in each method as we go:
-main:
i = 10
b = x.g(10) = 12 (returned from g)
---
after method g
i = 10
b = 12*
-f:
d = 0(passed from g's c variable)
n = 0
-while loop-
1st pass:
false, as 0*0 is not <0
n = n - 1 = 0 - 1 = -1
.
.
.
Keep comparing until n^2 is less than d passed in
-g:
a = 10 (passed from main's b variable)
b = 0;
c = NULL;
-for loop-
...n = 0
...c = f(0) = -1 (returned from f's return statement, 1st pass)
...b = b + c = 0 + -1 = -1
(And now after the first pass our variables are:
a = 10
b = -1
c = -1)
This continues until n=9 for n !>= 10
...b = 12
return b; // b is 12, and now we return to main
----------------------------------------------------------------------------------------
b + i = 12 + 10 = 22**
We are really only needing to find what b is, since i does not change in main. It's a lot of back and forth between method g and method f for b but we got it!
This seems like a lot but it's mostly pattern recognition bc of all the loops. It really helps to write down variables and update their values as you go thru code, just a tip.
Also, if you can, paste this into java and add print statements like: "b before adding" and "b after adding", etc. to see how, where, and why these variables change.
without running on java, what is the final answer, please show your work.
public class sample {
public static void main(String[] args){
Sample x = new Sample();
int i = 10;
int b = x.g(i);
System.out.println(b + i);
}
public int f(int d){
int n = 0;
while(n*n < d){
n++;
}
return n-1;
}
public int g(int a){
int b = 0;
int c;
for(int n = 0; n < a; n++){
c = f(n);
b = b + c;
}
return b;
}
}
2 answers
thanks @.