使用字符数组统计字符串元音字母时遇到的问题
解决Java元音统计代码的异常与逻辑问题
你的代码存在三个核心问题,直接导致了数组越界、统计错误等异常:
1. 循环条件错误触发数组越界
你的for循环条件写的是myString.length() > 0,只要输入字符串非空,这个条件永远为真,i会不断递增,直到超过vowelArray的索引范围(数组只有10个元素,索引0-9),最终触发ArrayIndexOutOfBoundsException。正确的循环应该限定为遍历元音数组的所有元素,条件改为i < vowelArray.length。
2. else分支逻辑完全错误
只要某个元音不在字符串中,你就直接return 0,这会导致函数提前终止。比如统计"hello"时,第一个循环判断'A'是否存在,不存在就直接返回0,根本不会继续统计后面的'e'和'o',完全无法得到正确结果。
3. 统计逻辑偏差
用contains判断元音是否存在并计数,统计的是字符串中包含多少种不同的元音,而不是字符串里元音的总个数。比如输入"aaa",按原逻辑只会统计为1,但实际元音总数是3。
修正方案1:统计字符串中元音的总个数
如果你的需求是统计所有元音字符的数量,用以下代码:
public class App { public static int vowelCounter(String myString) { // 先处理空字符串或null的情况 if(myString == null || myString.isEmpty()) { return 0; } char[] vowelArray = {'A','E','I', 'O', 'U', 'a', 'e', 'i', 'o', 'u'}; int countedVowels = 0; // 遍历字符串的每个字符 for(int i = 0; i < myString.length(); i++) { char currentChar = myString.charAt(i); // 检查当前字符是否是元音 for(char vowel : vowelArray) { if(currentChar == vowel) { countedVowels++; break; // 找到匹配就跳出内层循环,避免重复判断 } } } return countedVowels; } }
修正方案2:统计字符串中包含的不同元音种类数
如果你的需求是统计有多少种不同的元音出现在字符串中,用以下代码:
public class App { public static int vowelCounter(String myString) { if(myString == null || myString.isEmpty()) { return 0; } char[] vowelArray = {'A','E','I', 'O', 'U', 'a', 'e', 'i', 'o', 'u'}; int countedVowels = 0; // 遍历元音数组,逐个判断是否存在于字符串中 for(int i = 0; i < vowelArray.length; i++) { char vowel = vowelArray[i]; if(myString.contains(String.valueOf(vowel))) { countedVowels++; } // 移除错误的else return 0分支 } return countedVowels; } }
内容的提问来源于stack exchange,提问作者TheTargetAudience
相关产品推荐
相关产品推荐

