使用while循环实现的Java max函数的工作原理是什么?
代码原理说明
你提供的代码如下:
public static int max(int b, int a ,int d) { int o =0; while (b!=0 && a!=0 && d!=0) { b++; a++; d++; o--; } return o; }
该函数仅能正确处理三个负整数的最大值求解场景,你测试时能正常运行应该是所用的测试用例均为负整数,若输入包含0或正整数会出现错误结果甚至死循环,具体运行逻辑如下:
- 循环的触发条件是三个入参
b、a、d均不等于0,只要有任意一个入参变为0,循环就会立刻终止,返回变量o的取值 - 每次循环执行时,三个入参都会自增1,同时计数变量
o会自减1 - 对于负整数来说,数值越大就越接近0,比如
-1 > -3 > -5,因此三个负整数中的最大值,会是三个数里最先通过不断自增变为0的那个 - 假设三个负整数的最大值为
-k(k为正整数),则需要循环k次才能把这个最大值变为0,循环终止时o刚好从初始的0自减了k次,取值为-k,正好等于三个数的最大值
举个实际测试示例:输入三个数-6、-2、-4,最大值为-2
- 第一次循环后:三个数变为
-5、-1、-3,o取值为-1 - 第二次循环后:三个数变为
-4、0、-2,o取值为-2 - 此时第二个入参已经变为0,循环终止,返回
-2,正好是三个数的最大值
额外注意该函数的局限性:
- 若输入包含0,循环不会执行,直接返回0,和实际最大值不符
- 若输入包含正整数,正整数自增永远不会变为0,会触发死循环
- 若有多个最大值,比如两个
-2,逻辑依然成立,第一个达到0的变量依然是最大值,返回结果正确
内容的提问来源于stack exchange,提问作者annas99
相关产品推荐
相关产品推荐

