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

循环内修改外部int变量失效致while无限循环问题求助

循环无限执行的原因及修复方案

核心问题:循环内未更新查找位置

你代码里的leftAngleBracketLocation和rightAngleBracketLocation只在循环外初始化了一次,循环过程中只是更新了leftAngleIndex和rightAngleIndex,但没有重新调用indexOf()去获取新的括号位置。这就导致这两个变量永远是第一次找到的位置,只要初始文本里有<,leftAngleBracketLocation就不会变成-1,循环自然停不下来。

额外问题:右括号匹配逻辑错误

当前找右括号是从rightAngleIndex(初始为0)开始查找,这会导致如果文本前面有无关的>,会错误匹配到那个位置,而不是当前<对应的>。正确的做法应该是从当前<的位置之后开始查找>。

修复后的代码

/**
 * 该方法接收输入短语,替换所有非终结符直到全部替换完成
 * 
 * @param phrase
 * @return 最终短语
 */
private static String buildPhrase(String phrase) {
    StringBuilder finalPhrase = new StringBuilder();
    StringBuilder nonTerminal = new StringBuilder();

    int start = 0;
    int end = phrase.length();

    // 初始查找第一个<的位置
    int leftAngleBracketLocation = phrase.indexOf("<", start);

    // 循环查找所有非终结符
    while (leftAngleBracketLocation != -1) {
        // 找到当前<对应的>,从<的位置之后开始找
        int rightAngleBracketLocation = phrase.indexOf(">", leftAngleBracketLocation);
        // 如果找不到对应的>,终止循环(避免异常)
        if (rightAngleBracketLocation == -1) {
            break;
        }

        // 追加<之前的内容
        finalPhrase.append(phrase, start, leftAngleBracketLocation);

        // 提取当前非终结符(这里可以根据需求处理,比如替换成对应终结符)
        nonTerminal.setLength(0); // 清空之前的非终结符
        nonTerminal.append(phrase, leftAngleBracketLocation + 1, rightAngleBracketLocation);
        // 示例:这里假设你需要把非终结符替换成某个值,实际根据你的逻辑修改
        finalPhrase.append(nonTerminal);

        // 更新下一次查找的起始位置,跳过当前的>
        start = rightAngleBracketLocation + 1;
        // 查找下一个<的位置
        leftAngleBracketLocation = phrase.indexOf("<", start);
    }

    // 追加最后一个>之后的剩余内容
    finalPhrase.append(phrase, start, end);

    return finalPhrase.toString();
}

关键修改说明

  • 把rightAngleBracketLocation的查找移到循环内部,并且从当前leftAngleBracketLocation之后开始查找,确保匹配正确的<>对
  • 每次循环结束后,重新调用indexOf()更新leftAngleBracketLocation的位置,确保能找到下一个<或者变成-1终止循环
  • 更新start变量到当前>的下一个位置,避免重复处理内容
  • 每次处理非终结符前清空nonTerminal,避免累积旧内容
  • 增加了找不到对应>时的终止逻辑,防止数组越界异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:50:48