以下是主题拼图的解决方案和输出,我无法理解它的工作原理。
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次,循环的第二行通过&#39; x&#39; doStuff方法的值,用于返回值。我想出的结果数字与实际结果不符。
这里的任何帮助将不胜感激。如果我以错误的方式思考,请告诉我。如果有人想重新格式化我的代码以更紧密地与行业标准保持一致,那么从一开始就学习好习惯会很棒!
答案 0 :(得分:2)
这段代码`
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} 所以它会像这个结果=结果+ obs [5] .doStuff [5];
一样开始我猜所有误解,元素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
然后,如果你将所有数字加在一起,你就会得到你的输出
答案 1 :(得分:1)
在第二个while循环中, 而(x> 0)将给出543340 相反,虽然(x> = 0)应该提供所需的输出 如果我没看错
答案 2 :(得分:0)
对我而言,一个简单的方法就是逐步完成这一过程,逐步了解价值观的来源。我在下面做了这个并将其评论到代码中。
feedback@botframework.com
希望这有助于您理解这个例子。