gpt4 book ai didi

java - 无法理解这个输出

转载 作者:行者123 更新时间:2023-11-30 04:06:10 24 4
gpt4 key购买 nike

我有这个代码...

public class BackHanded {
int state = 0;

BackHanded(int s) {
state = s;
}

public static void main(String... hi) {
BackHanded b1 = new BackHanded(1);
BackHanded b2 = new BackHanded(2);
System.out.println(b1.go(b1) + " " + b2.go(b2));
}

int go(BackHanded b) {
if (this.state == 2) {
b.state = 5;
go(this);
}
return ++this.state;
}
}

为什么语句 return++this.state; 在第二个方法调用中执行了两次?

编辑:我预计输出是 2 6。但我得到 2 7。

最佳答案

该方法使用递归在自身内部调用自身。自 state != 2 以来第一次调用时不会发生递归,但是第二次调用满足条件 this.state == 2导致该方法递归。

int go(BackHanded b) {
if (this.state == 2) {
b.state = 5;
go(this);
}
return ++this.state;
}
}

第二次调用该方法的执行b2.go(b2)以这种方式发生:

  1. 对条件进行评估,因为 state ==2我们陷入了条件 block 。
  2. 在条件 block 内,状态被分配为 5。
  3. 然后该方法调用自身(递归)。
  4. 我们再次从条件句开始,这次 state != 2所以我们跳过条件。
  5. 该方法返回++this.state或 6 并完成自身的调用。
  6. 执行返回到第一次调用,该调用刚刚完成执行条件 block ,因此我们转到 return 语句 ++this.state或 7。

关于java - 无法理解这个输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20678808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com