首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Head First Java Puzzle4 (第4章,第91页)说明

Head First Java Puzzle4 (第4章,第91页)说明
EN

Stack Overflow用户
提问于 2017-01-29 14:32:12
回答 3查看 1K关注 0票数 0

下面是主题难题的解决方案和输出,我很难理解它是如何工作的。

代码语言:javascript
运行
复制
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);
    }
   }
  }

输出:

代码语言:javascript
运行
复制
result 543345

据我所知,第一个While循环将运行6次(从x==0到x==5)。Y变量以及'ivar‘的值将为1,000,000 (我认为这就是我错的地方,但我将继续努力,希望得到纠正)。

第二个While循环让我有点迷惑。它将运行6次,循环的第二行将'x‘值传递给doStuff方法以返回值。我给出的结果数字与实际结果不符。

这里的任何帮助都将不胜感激。如果我想错了,请告诉我。如果有人想重新格式化我的代码,使其更接近行业标准,最好从一开始就学习好习惯!

EN

回答 3

Stack Overflow用户

发布于 2017-04-08 05:52:05

这段代码`

代码语言:javascript
运行
复制
 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是递减的

所以它会是这样的

代码语言:javascript
运行
复制
  (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

如果你把所有的数字加在一起,你就会得到你的输出

票数 2
EN

Stack Overflow用户

发布于 2020-04-13 01:48:48

在第二个while循环中,如果我没记错,while(x>0)会给出543340,而(x>=0)应该会给出所需的输出

票数 1
EN

Stack Overflow用户

发布于 2017-04-08 06:29:16

对我来说,分解这一点的一个简单方法就是一步一步地看清这些值到底来自哪里。我已经在下面这样做了,并将其注释到代码中。

代码语言:javascript
运行
复制
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);
    }
   }
  }

希望这篇文章能帮助你理解这个例子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41918287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档