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

如何统计循环条件检查次数?冒泡排序语句计数异常排查

冒泡排序语句计数问题排查

我正在开发一个统计算法执行语句数的程序,针对冒泡排序实现了计数逻辑,但测试包含3个元素的已排序列表(最佳场景)时,发现循环条件语句计数结果为6,而手动统计应为8——问题出在无法统计内层循环条件为false时的检查次数。

现有实现代码

public static Stats bubbleSort(List<String> names) {
    Stats stats = new Stats();
    for (int x = 0; x < names.size() - 1; x++) {
        for (int y = x + 1; y < names.size(); y++) {
            if (names.get(x).compareTo(names.get(y)) > 0) {
                String temp = names.get(x);
                names.set(x, names.get(y));
                names.set(y, temp);
                stats.inLineStatements += 3;
            }
            stats.ifStatements += 1;
            stats.updateExpressionStatements += 1;
            stats.conditionStatements += 1;
        }
        stats.updateExpressionStatements += 1;
        stats.conditionStatements += 1;
    }
    stats.conditionStatements += 1;
    stats.initializationExpressionStatements += 2;
    return stats;
}

运行示例结果

Bubble Sort: 
Initialization Statements (For Loop):   2
Loop Condition Statements:  6
If Statements:  3
In Line Statements:     0
Update Expression Statements (For Loop):    5
Total Statements:   16

问题原因分析

当前代码中,内层循环的conditionStatements是在循环体内部累加,只有当循环条件判断为true、进入循环体时才会计数。但for循环的条件检查逻辑是:每次执行循环体前判断条件,当条件为false时退出循环——这最后一次的条件检查不会进入循环体,因此没有被统计到。

针对3个元素的已排序列表:

  • 外层循环条件检查共3次(x=0、1时为true,x=2时为false),这部分通过循环体末尾+循环结束后的额外计数,已经完整统计。
  • 内层循环:
    • x=0时,y需检查3次(1<3、2<3、3<3),但当前仅统计了前2次进入循环体的检查;
    • x=1时,y需检查2次(2<3、3<3),当前仅统计了第1次进入循环体的检查;
  • 总共少统计2次内层循环的false条件检查,导致结果从8变成6。

修复方案

在每个内层循环结束后,额外累加一次conditionStatements,对应最后一次条件为false的检查操作。修改后的代码如下:

public static Stats bubbleSort(List<String> names) {
    Stats stats = new Stats();
    for (int x = 0; x < names.size() - 1; x++) {
        for (int y = x + 1; y < names.size(); y++) {
            if (names.get(x).compareTo(names.get(y)) > 0) {
                String temp = names.get(x);
                names.set(x, names.get(y));
                names.set(y, temp);
                stats.inLineStatements += 3;
            }
            stats.ifStatements += 1;
            stats.updateExpressionStatements += 1;
            stats.conditionStatements += 1;
        }
        // 新增:统计内层循环最后一次false的条件检查
        stats.conditionStatements += 1;
        stats.updateExpressionStatements += 1;
        stats.conditionStatements += 1;
    }
    stats.conditionStatements += 1;
    stats.initializationExpressionStatements += 2;
    return stats;
}

修复后,循环条件语句计数会变为8,与手动统计结果一致。

内容的提问来源于stack exchange,提问作者Sheryn C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:55:37