You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java循环结构实现元音输入统计功能代码问题求助

问题分析

你当前的代码存在以下几处逻辑错误,导致和预期输出不符:

  1. counter++ 放在了while循环的外部,循环内永远不会改变counter的值,程序会进入死循环
  2. 所有元音计数变量初始值设为1,会导致最终统计结果比实际多1
  3. 元音U的统计分支遗漏了uppercaseU++的更新逻辑
  4. 输入过程中实时打印单次计数,不符合「全部输入完成后统一输出统计结果」的要求
  5. 没有存储用户输入的所有元音字符,无法实现最后输出所有输入元音的效果
  6. 多余的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:36:05