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

如何在Java中使用字母'X'终止循环?

用字母终止Java循环的实现方案

你当前的代码用nextInt()读取输入,只能处理数字,输入字母会直接抛出InputMismatchException,要实现「输入X退出」的功能,需要调整输入读取逻辑:先读取字符串,判断是否为终止符,再处理数字转换。以下是修改后的完整代码:

import java.util.Scanner;
import java.util.InputMismatchException;

public class AverageDemo {
    public static void main(String[] args) {
        Scanner scnr = new Scanner(System.in);
        int input = 0;
        int sum = 0;
        int count = 0;
        double avg = 0;

        // do...while 循环实现
        System.out.println("Average Demo using do Loop");
        System.out.println();
        System.out.println("Calculates an average of all numbers: Enter 'X' when finished");
        String userInput;
        do {
            System.out.print("Enter number ");
            userInput = scnr.nextLine().trim(); // 读取输入并去除首尾空格
            // 判断是否输入终止符
            if (userInput.equalsIgnoreCase("X")) {
                break; // 退出循环
            }
            // 尝试转换为数字
            try {
                input = Integer.parseInt(userInput);
                sum += input;
                count++;
            } catch (NumberFormatException e) {
                System.out.println("无效输入,请输入数字或X退出");
            }
        } while (true); // 循环持续直到输入X

        if (count > 0) {
            avg = (double) sum / count; // 强制转浮点避免整数除法丢失精度
            System.out.println("The average of all numbers is " + avg);
        } else {
            System.out.println("未输入任何数字,无法计算平均值");
        }
        System.out.println();
        System.out.println();

        // 重置变量
        count = 0;
        input = 0;
        avg = 0;
        sum = 0;

        // while 循环实现
        System.out.println("Average Demo using a While Loop");
        System.out.println();
        System.out.println("Calculates an average of all numbers: Enter 'X' when finished");
        while (true) {
            System.out.print("Enter number ");
            userInput = scnr.nextLine().trim();
            if (userInput.equalsIgnoreCase("X")) {
                break;
            }
            try {
                input = Integer.parseInt(userInput);
                sum += input;
                count++;
            } catch (NumberFormatException e) {
                System.out.println("无效输入,请输入数字或X退出");
            }
        }

        if (count > 0) {
            avg = (double) sum / count;
            System.out.println("The average of all numbers is " + avg);
        } else {
            System.out.println("未输入任何数字,无法计算平均值");
        }
        System.out.println();

        // 打印星号金字塔的for循环保持不变
        for (int i = 0; i < 10; i++) {
            for (int y = 0; y <= i; y++) {
                System.out.print("*");
            }
            System.out.println();
        }

        scnr.close();
    }
}

关键修改点说明:

  • 输入读取方式:改用scnr.nextLine()读取完整输入行,避免nextInt()遗留换行符导致的读取异常,同时能处理字母输入。
  • 终止判断:用equalsIgnoreCase("X")实现不区分大小写的终止(输入x也能退出),符合用户使用习惯。
  • 异常处理:捕获NumberFormatException,处理用户输入非数字也非X的情况,给出友好提示。
  • 平均值计算优化:将sum强制转为double再做除法,避免整数除法导致的精度丢失(比如总和为5、计数为2时,原来的代码会得到2,修改后得到2.5)。
  • 边界处理:增加count > 0的判断,避免用户直接输入X导致的除以0异常。

内容的提问来源于stack exchange,提问作者Lis12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:01:55