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

Java循环开发:输入1-4数字求平均,输入0终止,异常值重输

解决Java循环输入与异常值处理的问题

嘿,完全不用纠结,while循环正是处理这类持续输入场景的绝佳选择!我给你把两个需求的完整实现都写出来,还包含了所有异常值(比如非数字输入、超出范围的数)的处理逻辑,你可以直接参考:


需求1:循环接收输入直到输入0终止,仅接受1-4的有效值

这个需求的核心是用外层循环控制程序运行(直到输入0),内层循环处理无效输入的重试逻辑:

import java.util.Scanner;

public class InputLoopDemo1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int input;

        System.out.println("请输入1-4的数字,输入0终止程序:");
        while (true) {
            // 先判断输入是否为整数,避免非数字输入导致的异常
            while (!scanner.hasNextInt()) {
                System.out.println("请输入有效的整数!");
                scanner.next(); // 清空无效输入缓存,防止死循环
            }
            input = scanner.nextInt();

            if (input == 0) {
                System.out.println("程序已终止");
                break;
            } else if (input >= 1 && input <= 4) {
                System.out.println("你输入了有效的数字:" + input);
                // 这里可以添加对有效输入的业务处理逻辑
            } else {
                System.out.println("输入超出范围,请重新输入1-4之间的数字:");
            }
        }
        scanner.close();
    }
}

关键逻辑说明:

  • 外层while(true)是无限循环,直到输入0时用break跳出程序
  • 内层循环专门拦截非数字输入,避免nextInt()抛出异常
  • 每次无效输入后用scanner.next()清空缓冲区,防止后续循环重复读取无效内容

需求2:输入任意多个1-4的数字,输入0结束并计算平均值

这个需求需要额外统计有效输入的总和和个数,最后计算平均值:

import java.util.Scanner;

public class InputLoopDemo2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int input;
        int sum = 0;
        int validCount = 0;

        System.out.println("请输入1-4的数字,输入0结束程序并计算平均值:");
        while (true) {
            // 处理非数字输入
            while (!scanner.hasNextInt()) {
                System.out.println("请输入有效的整数!");
                scanner.next();
            }
            input = scanner.nextInt();

            if (input == 0) {
                break;
            } else if (input >= 1 && input <= 4) {
                sum += input;
                validCount++;
                System.out.println("已记录有效数字:" + input);
            } else {
                System.out.println("输入无效(需为1-4的数字),请重新输入:");
            }
        }

        // 计算并输出平均值,注意避免除以0的情况
        if (validCount == 0) {
            System.out.println("没有有效输入,无法计算平均值");
        } else {
            double average = (double) sum / validCount;
            System.out.printf("有效输入的平均值为:%.2f%n", average);
        }
        scanner.close();
    }
}

关键逻辑说明:

  • 用sum和validCount分别记录有效输入的总和与数量
  • 结束循环后先判断validCount是否为0,避免出现除以0的运行时错误
  • 强制转换sum为double类型,确保平均值是浮点数结果

额外小提示:

如果你不想嵌套while循环,也可以用do-while来实现重试逻辑,核心思路是一致的——持续判断输入的有效性,直到符合要求为止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:25:25