下面是主题难题的解决方案和输出,我很难理解它是如何工作的。
public class Puzzle4 {
public static void main(String[] args) {
Puzzle4b[] obs = new Puzzle4b[6];
int y = 1;
int x = 0;
int result = 0;
while (x<6) {
obs[x] = new Puzzle4b();
obs[x].ivar = y;
y = y*10;
x = x+1;
}
x = 6;
while (x>0) {
x = x-1;
result = result + obs[x].doStuff(x);
}
System.out.println("result " + result);
}
}
class Puzzle4b {
int ivar;
public int doStuff(int factor) {
if (ivar>100) {
return ivar*factor;
} else {
return ivar*(5-factor);
}
}
}
输出:
result 543345
据我所知,第一个While循环将运行6次(从x==0到x==5)。Y变量以及'ivar‘的值将为1,000,000 (我认为这就是我错的地方,但我将继续努力,希望得到纠正)。
第二个While循环让我有点迷惑。它将运行6次,循环的第二行将'x‘值传递给doStuff方法以返回值。我给出的结果数字与实际结果不符。
这里的任何帮助都将不胜感激。如果我想错了,请告诉我。如果有人想重新格式化我的代码,使其更接近行业标准,最好从一开始就学习好习惯!
发布于 2017-04-08 05:52:05
这段代码`
obs[x].ivar = y;
y = y*10;
将导致第一个ivar =y=1,然后是多个y,因此它将是{1 - 10 - 100 - 1,000 - 10,000 - 100,000}
第二个循环x将是{5,4,3,2,1,0},因此它将像这样开始: result = result+obs5.doStuff5;
我猜所有的误解都认为元素1中的x等于元素5中的y,元素2中的x等于元素4中的y,依此类推,“因为x是递增的,y是递减的
所以它会是这样的
(ivar > 100 )
ivar * (5-factor)
x[3] * y[2] = 1000 * (5-2) = 3000
x[4] * y[1] = 10000 * (5-1) = 40000
x[5] * y [0] = 100000 * (5-0) = 500000
then (ivar < 100)
ivar * factor
x[1] * y [5] = 1 * 5 = 5
x[2] * y [4] = 10 * 4 = 40
x[3] * y [3] = 100 * 3= 300
如果你把所有的数字加在一起,你就会得到你的输出
发布于 2020-04-13 01:48:48
在第二个while循环中,如果我没记错,while(x>0)会给出543340,而(x>=0)应该会给出所需的输出
发布于 2017-04-08 06:29:16
对我来说,分解这一点的一个简单方法就是一步一步地看清这些值到底来自哪里。我已经在下面这样做了,并将其注释到代码中。
public class Puzzle4 {
public static void main(String[] args) {
Puzzle4b[] obs = new Puzzle4b[6];
int y = 1;
int x = 0;
int result = 0;
// let's break out of the loops
obs[0] = new Puzzle4b();
obs[0].ivar = 1;
obs[1] = new Puzzle4b();
obs[1].ivar = 10;
obs[2] = new Puzzle4b();
obs[2].ivar = 100;
obs[3] = new Puzzle4b();
obs[3].ivar = 1000;
obs[4] = new Puzzle4b();
obs[4].ivar = 10000;
obs[5] = new Puzzle4b();
obs[5].ivar = 100000;
// ivar's = 1, 10, 100, 1000, 10000, 100000
result = result + obs[5].doStuff(5); // 0 + (5 * 100000)
result = result + obs[4].doStuff(4); // 500000 + (4 * 10000)
result = result + obs[3].doStuff(3); // 540000 + (3 * 1000)
result = result + obs[2].doStuff(2); // 543000 + ((5 - 2) * 100)
result = result + obs[1].doStuff(1); // 543300 + ((5-1) * 10)
result = result + obs[0].doStuff(0); // 543340 + ((5-0) * 1)
// result = 543345
}
System.out.println("result " + result);
}
}
class Puzzle4b {
int ivar;
public int doStuff(int factor) {
if (ivar>100) {
return ivar*factor;
} else {
return ivar*(5-factor);
}
}
}
希望这篇文章能帮助你理解这个例子。
https://stackoverflow.com/questions/41918287
复制相似问题