Head First Java Puzzle4(第4章,第91页)解释

时间:2017-01-29 06:32:12

标签: java

以下是主题拼图的解决方案和输出,我无法理解它的工作原理。

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方法的值,用于返回值。我想出的结果数字与实际结果不符。

这里的任何帮助将不胜感激。如果我以错误的方式思考,请告诉我。如果有人想重新格式化我的代码以更紧密地与行业标准保持一致,那么从一开始就学习好习惯会很棒!

3 个答案:

答案 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

希望这有助于您理解这个例子。