我在从字符串数组中提取包含三个以上“ O”或“ o”的名称时遇到了麻烦。我必须在以后打印它们。我在哪里出错了,该如何解决?

static String[] towns = {"England", "France",
    "Romania", "Germany", "Canada", "Russia",
      "Eoeoeooero"};

 public static void main(String[] args) {


    for (int i = 0; i < towns[i].length(); i++) {



            for (int j = 0; j < towns[i].length(); j++) {
                if (towns[i].charAt(j) == 'o' || towns[i].charAt(j) == 'O') {
                    e++;
                }
            }

            if (e > 3) {
                System.out.println(towns[i]);
            }
        }
    }

}

最佳答案

由于您缺少变量e的声明,因此我假设它在类的范围内声明。这是一个坏主意,因为它在同一实例上运行的所有方法之间共享,如果为static,则在所有方法之间共享。

将变量e设置为方法的局部变量,并将其移至for循环的作用域以解决问题:

for (int i = 0; i < towns.length(); i++) {
    int e = 0; // <<== Here
    for (int j = 0; j < towns[i].length(); j++) {
        if (towns[i].charAt(j) == 'o' || towns[i].charAt(j) == 'O') {
            e++;
        }
    }
    if (e > 3) {
        System.out.println(towns[i]);
    }
}

08-16 18:16