Java元音计数器应用卡在for循环?不像是无限循环的问题
问题根因
- 程序无响应是死循环导致,和本地/在线运行环境无关。Java中
String是不可变类,z.replace()方法不会修改原有z字符串,只会返回新的替换后字符串,你没有将返回值赋值给z,导致z内容永远不变,indexOf始终能找到对应元音字符,循环永远不会退出。 - 当前嵌套循环逻辑冗余,通过删除字符统计元音的实现方式效率低,且容易出错。
修正后代码(符合项目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 lowerInput = x.toLowerCase(); String lowerVowels = vowels.toLowerCase(); // 外层遍历输入字符串所有字符 for (int i = 0; i < lowerInput.length(); i++) { char currentChar = lowerInput.charAt(i); // 内层遍历元音表匹配判断 for (int j = 0; j < lowerVowels.length(); j++) { if (currentChar == lowerVowels.charAt(j)) { count++; break; // 匹配到元音直接跳出内层循环,减少不必要运算 } } } return count; } }
实现说明
- 完全满足项目要求,使用两层for循环实现统计
- 无需修改原字符串,逻辑简单清晰,不会出现死循环问题
- 自动兼容大小写输入,和原有实现的业务逻辑一致
内容的提问来源于stack exchange,提问作者user17261586
相关产品推荐
相关产品推荐

