元音计数器 Java 应用程序:卡在循环中?似乎不是一个无限循环



我编写了一个java程序来计算字符串中元音的数量,并且我需要使用一个或多个for循环来为一个项目完成这项工作。问题是,在输入字符串

之后,它不做任何事情,或者只是花费太长时间:
import java.util.Scanner;
class Main
{
public static void main(String[] args)
{
Scanner s = new Scanner(System.in);
System.out.print("Enter a string to count the vowels>> ");
String x = s.nextLine();
int numVowels = countVowels(x, "aeiou");
System.out.println(numVowels);
}
static int countVowels(String x, String vowels)
{
int count = 0;
String z = x.toLowerCase();
for (int i = 0; i <= vowels.length() - 1; i++)
{
if (i == vowels.length() - 1)
{
for (int n = z.indexOf(vowels.substring(i)); n != -1; count++)
{
z.replace(vowels.substring(i), "");
}
}
else if (z.indexOf(vowels.substring(i, i + 1)) != -1)
{
for (int n = z.indexOf(vowels.substring(i, i + 1)); n != -1; count++)
{
z.replace(vowels.substring(i, i + 1), "");
}
}
}
return count;
}
}

我已经减少了循环的数量,因为原来的很混乱。我认为问题在于嵌套循环,但我还没有尝试在本地编译器上运行这个,只有在线ide。我听说它使编译时间大为不同。

这是一个无限循环:如果你只使用z.replace,你不会对z做任何事情。因为字符串在Java中是不可变的,你不能仅仅通过调用一个方法来改变它,你必须重新赋值它:

z = z.replace(...)

我冒昧地使用while-loop而不是for-loop,因为这个想法是不断循环,直到找到,计数和替换所有元音一个接一个。

static int countVowels(String x, String vowels) {
int count = 0;
String z = x.toLowerCase();
for (int i = 0; i < vowels.length(); i++) {
String vowel = Character.toString(vowels.charAt(i));
while (z.indexOf(vowel) != -1) {
count++;
z = z.replaceFirst(vowel, "");
}
}
return count;
}

相关内容

最新更新