【问题标题】:javascript while loop doesn't endjavascript while循环没有结束
【发布时间】:2014-02-01 11:52:23
【问题描述】:

我正在尝试在JavaScript 中运行以下while 循环:

function returnSubstring(i, theString) {
    var j = 1;
    while (i > 1) {
        if (theString.charCodeAt(j) == ',') {
            i--;
        }
        else {
            <% System.out.println("nope, not a comma"); %>
        }
        j++;
    }
    var value = theString;
    var subString = value.substring(j, value.indexOf(",", j+1));
    alert(subString);       
}

我只是传递一个 indexstring

returnSubstring(someIndex, someString);

它一直在崩溃。我想我至少在while 循环中获得了一轮。 (我得到 1 'nope') 我在这里做错了什么?

当索引为 0 或 1 时它也可以工作。但其他数字,没有

【问题讨论】:

  • 学习使用浏览器的调试工具。
  • 那么,当字符串不包含逗号时会发生什么?另外,您是否收到错误或无限循环?
  • 你不会在 else 语句中减少 i
  • @Johnny5 我正在使用i 来确定我想停在哪里。每次我找到一个逗号时,我的目标就少了 1 个逗号,因此 i--
  • System.out.println 是 java,而不是 JavaScript。 &lt;÷ 是什么?我认为这是服务器端的一种逃避,比如 asp/php。

标签: javascript string if-statement while-loop substring


【解决方案1】:

您应该始终递减i,否则您将永远无法结束循环,并且 J 将超出范围。另外...你应该var j = 0,否则你会跳过第一个字符。

例如:"Text"i == 2

您从以下位置开始:
"T",无逗号,向前移动 ji 仍为 2。
"e",无逗号,向前移动 ji 仍为 2 .
"x",无逗号,向前移动 ji 仍为 2。
"t",无逗号,向前移动 ji 仍为 2。
@987654337 @,没有逗号,j 现在越界了,向前移动 ji 仍然是 2。
^ 最后一步将永远重复。

相反,将您的代码更改为:

function returnSubstring(i, theString) {
    i = i > theString.length() ? theString.length() : i; // don't go too far.
    var j = 0; // Start at 0
    while (i >= 1) { // `i > 1` is stopping the code 1 character earlier
        if (theString.charCodeAt(j) != ',') { // this `if` is not required
            console.log("nope, not a comma"); // No JAVA code, please
        }
        i--;
        j++;
    }
    var value = theString;
    var subString = value.substring(j, value.indexOf(",", j+1));
    // alert(subString); // not necessary
    return subString; // return the value
}

【讨论】:

    【解决方案2】:

    你应该减少i

    你确定可以这样做吗:

    <% System.out.println("nope, not a comma"); %>
    

    你为什么不使用:

    document.write()
    

    【讨论】:

      【解决方案3】:

      如果i 处的字符不是逗号,您不会减少i。我建议使用 for 循环,以便 i 无论循环中有什么内容都会递减:for (; i &gt; 1; i--)

      【讨论】:

        【解决方案4】:

        我建议您的循环遍历输入字符串,如下所示:

        for(var i = 0; i < theString.length; i++) { ... }
        

        这样可以防止一些导致无限循环的逻辑错误。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-04-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-06
          • 1970-01-01
          • 2014-03-15
          • 2017-04-18
          相关资源
          最近更新 更多