我冻结了以下代码以计算字符串中字符的出现:

public static void main(String[] args) {
    String source = "hello low how ale you";
    Scanner in = new Scanner(System.in);
    String temp = in.nextLine();
    char test = temp.toCharArray()[0];

    int fromIndex = 0;
    int occurences =0;

        while(fromIndex>-1)
        {
        fromIndex = source.indexOf(test, fromIndex);
        System.out.println("found at"+fromIndex);
        //if(fromIndex!=-1) occurences++;
        }
    System.out.println(occurences);
    }


如果将“ if(fromIndex!=-1)”行注释掉,循环将无限运行!
如果取消注释同一行,则循环将正确终止。
观察到循环的终止取决于变量fromIndex而不是取决于If块中正在更新的变量occurences的更新,这很奇怪。

为什么会这样呢?

最佳答案

fromIndex值在后续迭代中不会更改。那就是无尽循环背后的原因。那是因为fromIndex会给出字符的确切索引。为下一个循环将fromIndex增加1,这样就可以解决问题。

while(fromIndex>-1)
            {
                fromIndex = source.indexOf(test, fromIndex+1);
                System.out.println("found at"+fromIndex);
                if(fromIndex!=-1) occurences++;
                }
            }


希望这可以帮助。

08-06 17:20