Heim  >  Fragen und Antworten  >  Hauptteil

java – Fragen zu While,break

Entschuldigung, warum kann die nachfolgende while-Schleife nicht mehr in den ersten Halbzweig eintreten, sobald die while-Schleife dieses Codes in den hinteren Teil von else eintritt? Ich denke, die Bedingung nach dem if sollte erfüllt sein. Das laufende Ergebnis kann nicht gebrochen werden, da es nicht in die erste Schleife gelangen kann. Gott um Rat bitten:

public class SearchString {

public static void main(String[] args) {
    String s1 = "abcaaaaaaaabcabc";
    String s2 = "abc";
    int len = s2.length();
    int pos = 0;
    int count = 0;
    while (true) {
        if (s1.indexOf(s2, pos) == -1) {
            System.out.println("Search Over, result count=" + count);
            break;
        } else {
            System.out.println("Position" + (count + 1) + " is " + pos);
            int a = pos + len;
            pos = s1.indexOf(s2, a);
            count++;
        }
    }
}

}
Das laufende Ergebnis ist -1 10 13 -1 10 13, eine Endlosschleife

習慣沉默習慣沉默2713 Tage vor574

Antworte allen(2)Ich werde antworten

  • 黄舟

    黄舟2017-05-17 10:04:00

    因为当第三次查询的时候 无法匹配到结果因此返回的值-1, indexOf()的第二个参数如果小于0的话将被当作0处理。
    因此又开始了第一次的循环。

    你可以断点调试下,结果很清楚

    Antwort
    0
  • PHP中文网

    PHP中文网2017-05-17 10:04:00

    当进入第二次循环的时候进入了else,pos变为13。下次的循环也就是当进入第三次循环的时候还是进入了else。
    这次在else里面a变成了16,pos则为-1,下次的循环s1,indexOf(s2, pos)为0,还是进入else了,所以产生了死循环。

    我觉得你需要每次在else里面不要改变pos,而是要直接截s1字符串的后半部分。

    Antwort
    0
  • StornierenAntwort