Java字符串数组元音统计代码出错,请求排查与修正指导
代码问题分析及修复
核心错误点
- 仅检查单个字符:原代码中
values[i].charAt(i)只检查了第i个字符串的第i位字符,完全没有遍历字符串的所有字符统计元音,逻辑完全错误。 - 单一变量复用:用全局的
vowels变量累加所有符合条件的字符,最后输出时所有行都打印同一个值,导致每个字符串的元音数量显示完全一致。
修复后的代码
import java.util.Scanner; public class Array2 { public static void main(String[] args) { Scanner keyboard = new Scanner(System.in); String[] values = new String[5]; // 用数组存储每个字符串的元音数量,与输入字符串一一对应 int[] vowelCounts = new int[5]; for (int i = 0; i < values.length; i++) { System.out.print("Enter the string: "); values[i] = keyboard.nextLine(); int currentVowels = 0; // 遍历当前字符串的每一个字符 for (int j = 0; j < values[i].length(); j++) { // 转小写,兼容大写元音的情况 char c = Character.toLowerCase(values[i].charAt(j)); if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') { currentVowels++; } } vowelCounts[i] = currentVowels; } // 输出表头和结果 System.out.printf("%15s %15s %15s %15s\n", "Number", "Value", "Length", "Number of Vowels"); for (int n = 0; n < values.length; n++) { System.out.printf("%15d %15s %15d %15d\n", n + 1, values[n], values[n].length(), vowelCounts[n]); System.out.println(); } keyboard.close(); } }
关键改动说明
- 新增
vowelCounts数组,为每个输入字符串单独存储元音数量,避免了单一变量的复用问题。 - 增加内层循环,遍历每个字符串的所有字符,确保每个字符都被检查是否为元音。
- 加入
Character.toLowerCase()处理,让代码可以识别大写的元音字母(如'A'、'E'),提升代码的通用性。 - 输出时对应每个字符串的
vowelCounts[n]值,保证每个结果都是对应字符串的真实元音数量。 - 补充
keyboard.close(),关闭输入流避免资源泄漏。
内容的提问来源于stack exchange,提问作者QJack
相关产品推荐
相关产品推荐

