害死人的自动递增,不偿命的自动递减

简介: 害死人的自动递增,不偿命的自动递减

记得参加工作的第二年,我的同事小二就因为把“前缀递增”写成了“后缀递增”被一顿痛骂之后拉出去祭天了。至今我还耿耿于怀,因为我也是参与者之一(当时小王准备使用p = p + 1,但我劝小王使用p++,因为自动递增更加简洁);但小二很讲义气,没有把我捅出去,我才苟且活到今日。往事不堪回首,但为了以后的Java程序员着想,我决定忍着记忆的苦涩把小二当年的那段代码记录下来:


public static void main(String[] args) {
  int p = 0;
  calculate(p);
}
public static void calculate(int p) {
  if (p < 3) {
  // 其他
  calculate(p++);
  }
}


按照以上的代码来看,这是一个死循环,calculate迭代是不会跳出的,直到程序报错。为什么会这样呢?


因为后缀递增会先生成值,再执行运算;也就是p++这个表达式的结果还是p。但前缀递增会先执行运算,再生成值;也就是++p这个表达式的结果是p+1。


那以上代码正确的写法是什么呢?答案如下:


public static void main(String[] args) {
  int p = 0;
  calculate(p);
}
public static void calculate(int p) {
  if (p < 3) {
  // 其他
  calculate(++p);
  }
}


相关文章
|
6天前
|
算法 测试技术
枚举(蓝桥练习)(反倍数、特别数的和、找到最多的数、小蓝的漆房、小蓝和小桥的挑战)
枚举(蓝桥练习)(反倍数、特别数的和、找到最多的数、小蓝的漆房、小蓝和小桥的挑战)
|
6天前
|
JavaScript 测试技术
【动态规划】【精度】1883. 准时抵达会议现场的最小跳过休息次数
【动态规划】【精度】1883. 准时抵达会议现场的最小跳过休息次数
|
6天前
适时把自己归零
适时把自己归零
22 0
|
6天前
满足条件的01序列(大厂机考题)
满足条件的01序列(大厂机考题)
|
7月前
|
算法
【算法挨揍日记】day06——1004. 最大连续1的个数 III、1658. 将 x 减到 0 的最小操作数
1004. 最大连续1的个数 III 题目描述: 给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数 。
371 1
|
9月前
|
算法
算法训练Day34|1005.K次取反后最大化的数组和 ● 134. 加油站● 135. 分发糖果
算法训练Day34|1005.K次取反后最大化的数组和 ● 134. 加油站● 135. 分发糖果
|
9月前
|
算法
算法训练Day35|860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球
算法训练Day35|860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球
|
10月前
|
算法
费解的开关/翻硬币
费解的开关/翻硬币
枚举时对数组操——三刷AcWing 95. 费解的开关
枚举时对数组操——三刷AcWing 95. 费解的开关
48 0