Java循环结构实现元音输入统计功能代码问题求助
问题分析
你当前的代码存在以下几处逻辑错误,导致和预期输出不符:
counter++放在了while循环的外部,循环内永远不会改变counter的值,程序会进入死循环- 所有元音计数变量初始值设为1,会导致最终统计结果比实际多1
- 元音U的统计分支遗漏了
uppercaseU++的更新逻辑 - 输入过程中实时打印单次计数,不符合「全部输入完成后统一输出统计结果」的要求
- 没有存储用户输入的所有元音字符,无法实现最后输出所有输入元音的效果
- 多余的
if (input==vowel)逻辑无实际作用,属于无效代码
修正后的完整代码
import java.util.Scanner; public class VowelCount { public static void main(String[] args) { Scanner sad = new Scanner(System.in); // 计数变量初始值统一设为0 int input = 0, lowercasea = 0, uppercaseA = 0, lowercasee = 0, uppercaseE = 0, lowercasei = 0, uppercaseI = 0, lowercaseo = 0, uppercaseO = 0, lowercaseu = 0, uppercaseU = 0, counter = 0; char vowel = 0; // 存储所有输入的元音 StringBuilder inputVowels = new StringBuilder(); System.out.print("how many vowels do you want to input? "); input = sad.nextInt(); // 吞掉nextInt残留的换行符,避免后续读取输入出错 sad.nextLine(); while (input != counter) { System.out.print("enter the vowel: "); vowel = sad.next().charAt(0); // 把当前输入的元音存入拼接字符串 inputVowels.append(vowel).append(" "); counter++; // 只做计数更新,不实时打印 if (vowel == 'a') { lowercasea++; } else if (vowel == 'A') { uppercaseA++; } else if (vowel == 'e') { lowercasee++; } else if (vowel == 'E') { uppercaseE++; } else if (vowel == 'i') { lowercasei++; } else if (vowel == 'I') { uppercaseI++; } else if (vowel == 'o') { lowercaseo++; } else if (vowel == 'O') { uppercaseO++; } else if (vowel == 'u') { lowercaseu++; } else if (vowel == 'U') { uppercaseU++; } } // 全部输入完成后统一输出 System.out.println("you entered: " + inputVowels.toString().trim()); // 只打印计数大于0的统计项 if (lowercasea > 0) System.out.println("count of lowercase a: " + lowercasea + "time(s)"); if (uppercaseA > 0) System.out.println("count of uppercase A: " + uppercaseA + " time(s)"); if (lowercasee > 0) System.out.println("count of lowercase e: " + lowercasee + "time(s)"); if (uppercaseE > 0) System.out.println("count of uppercase E: " + uppercaseE + " time(s)"); if (lowercasei > 0) System.out.println("count of lowercase i: " + lowercasei + "time(s)"); if (uppercaseI > 0) System.out.println("count of uppercase I: " + uppercaseI + "time(s)"); if (lowercaseo > 0) System.out.println("count of lowercase o: " + lowercaseo + "time(s)"); if (uppercaseO > 0) System.out.println("count of uppercase O: " + uppercaseO + " time(s)"); if (lowercaseu > 0) System.out.println("count of lowercase u: " + lowercaseu + "time(s)"); if (uppercaseU > 0) System.out.println("count of uppercase U: " + uppercaseU + " time(s)"); sad.close(); } }
关键调整说明
- 修复了循环计数变量的更新位置,避免死循环
- 统一修正计数变量初始值,补全U字符的计数更新逻辑
- 新增字符串拼接变量存储所有输入的元音,满足最终汇总输出的要求
- 调整打印逻辑为所有输入完成后统一输出,仅展示计数不为0的统计项,和预期输出格式完全匹配
- 新增Scanner资源关闭逻辑,避免资源泄漏
内容的提问来源于stack exchange,提问作者Ikki Kurogane
相关产品推荐
相关产品推荐

