java - Questions sur While, Break
習慣沉默
習慣沉默 2017-05-17 10:02:00
0
2
604

Excusez-moi, pourquoi une fois que la boucle while de ce code entre dans la partie arrière de else, la boucle while suivante ne peut plus entrer dans la première moitié de la branche ? Je pense que la condition après le if doit être satisfaite. Le résultat en cours ne peut pas être rompu car il ne peut pas entrer dans la première boucle. Demander conseil à Dieu :

classe publique 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++;
        }
    }
}

}
Le résultat courant est -1 10 13 -1 10 13, une boucle infinie

習慣沉默
習慣沉默

répondre à tous(2)
黄舟

Étant donné que le résultat ne peut pas être égalé lors de la troisième requête, la valeur renvoyée est -1. Si le deuxième paramètre de indexOf() est inférieur à 0, il sera traité comme 0.
Le premier cycle recommence donc.

Vous pouvez déboguer avec des points d'arrêt, le résultat sera très clair

洪涛

Lorsque vous entrez dans la deuxième boucle, else est entré et pos devient 13. La boucle suivante, c'est-à-dire qu'en entrant dans la troisième boucle, elle entre toujours autrement.
Cette fois, a devient 16 dans else, et pos vaut -1. Dans la boucle suivante, s1, indexOf(s2, pos) vaut 0, et il entre toujours else, donc une boucle infinie est générée.

Je pense que vous n'avez pas besoin de changer de position à chaque fois, mais d'intercepter directement la seconde moitié de la chaîne s1.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal