java – Fragen zu While,break
習慣沉默
習慣沉默 2017-05-17 10:02:00
0
2
564

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

習慣沉默
習慣沉默

Antworte allen(2)
黄舟

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

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

洪涛

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

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

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!