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
相关产品推荐
相关产品推荐

