为何这段Java程序会出现执行耗时过长的错误?
程序执行耗时过长(死循环)的原因及修复方案
你的代码存在死循环问题,这是导致程序执行耗时过长(实际是永远无法结束)的核心原因,具体分析如下:
问题根源
当输入的N为奇数(尤其是N=1)时,代码会陷入无限循环:
- 以
N=1为例,N%2!=0条件成立,执行N=(1+1)/2=1,循环条件N>=1始终满足,循环会反复执行,永远跳不出去。 - 代码中第三个分支
else if(N==1)完全无效,因为前面的else if(N%2!=0)已经覆盖了所有奇数场景(包括N=1),这个分支永远不会被触发。
修复方案
调整分支顺序,优先处理N=1的特殊情况,同时简化冗余逻辑,修正后的代码如下:
public static int meth(int N) { int count1 = 0; int count2 = 0; int tot = 0; while (N >= 1) { if (N == 1) { // 处理N=1的特殊情况,吃完后直接将N置为0,终止循环 count2++; N = 0; } else if (N % 2 == 0) { N = N / 2; count1++; } else { // 处理其他奇数情况,确保N会逐步减小 N = (N + 1) / 2; count2++; } } tot = count1 + count2; return tot; } public static void main(String[] args) { int i = meth(4); System.out.println(i); // 输出3,符合示例1要求 int j = meth(1); System.out.println(j); // 输出1,正确处理边界场景 }
修复说明
- 优先判断
N==1,处理后直接将N置为0,确保循环能正常终止; - 移除了冗余的条件判断,让逻辑更清晰;
- 测试边界场景(如
N=1、N=0)都能得到正确结果。
内容的提问来源于stack exchange,提问作者KunaRakeshKumar
相关产品推荐
相关产品推荐

