You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java循环首次执行后不再运行:第二次迭代失效问题排查

循环只执行一次?问题出在变量冲突!

嘿,我一眼就揪出问题所在了——你外层循环和内层循环用了同一个计数器变量i,这直接把循环逻辑搞崩啦!

问题详细分析

咱们一步步拆解:

  1. 外层循环初始化i=0,当i < t(这里输入的t=2)时进入循环
  2. 第一次进入外层循环后,内层循环又把i重置为0,接着执行n次迭代
  3. 内层循环跑完后,i的值会变成n(比如第一个测试用例n=10,跑完后i就变成10了)
  4. 这时候回到外层循环的条件判断i < t(10 < 2?显然不成立),所以外层循环直接终止,根本不会执行第二次迭代

另外还有个隐藏小坑:你的sum变量是在所有循环外面初始化的,就算循环能跑第二次,sum也会累积第一次的结果,导致第二个测试用例的输出完全错误。

修正后的代码

把内层循环的变量换成别的(比如j),同时把sum移到外层循环内部,每次处理新的测试用例时重新初始化:

class Solution {
    public static void main(String[] argh) {
        Scanner in = new Scanner(System.in);
        int t = in.nextInt();
        for (int i = 0; i < t; i++) {
            int sum = 0; // 每个测试用例重新初始化sum,避免结果累积
            int a = in.nextInt();
            int b = in.nextInt();
            int n = in.nextInt();
            // 内层循环用j当计数器,彻底避免和外层的i冲突
            for (int j = 0; j < n; j++) {
                sum += (a + (Math.pow(2, j) * b));
                System.out.print(sum + " ");
            }
        }
        in.close();
    }
}

更优化的小建议

Math.pow返回的是double类型,强制转int可能会有潜在精度风险(虽然这里2的幂次没问题,但养成好习惯很重要),可以用整数变量来维护幂次,效率更高也更安全:

class Solution {
    public static void main(String[] argh) {
        Scanner in = new Scanner(System.in);
        int t = in.nextInt();
        for (int i = 0; i < t; i++) {
            int sum = 0;
            int a = in.nextInt();
            int b = in.nextInt();
            int n = in.nextInt();
            int currentPow = 1; // 初始为2^0=1
            for (int j = 0; j < n; j++) {
                sum += (a + currentPow * b);
                System.out.print(sum + " ");
                currentPow *= 2; // 每次乘2,得到下一个2的幂次
            }
        }
        in.close();
    }
}

现在运行你的输入2 0 2 10 5 3 5,就能得到完全符合预期的输出啦:

2 6 14 30 62 126 254 510 1022 2046 8 14 26 50 98

内容的提问来源于stack exchange,提问作者Bhavishya Bharara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:56:28