Java开发问题:满足两个条件时如何重新提示用户输入double值?
功能实现说明
现有代码问题排查
- 开头单独读取的首次输入没有做重试逻辑,碰到99999仅打印错误就直接进入后续循环,没有强制用户重新输入有效值
- 循环内碰到99999直接退出,没有判断当前列表是否为空,不符合“空列表时输入99999不能结束”的需求
- count计数逻辑顺序有误,会导致第10个有效元素无法正常存入列表
修正后完整代码
import java.util.*; public class DistanceTesting { public static void main(String[] args) { List<Double> doubleList = new ArrayList<>(); final int MAX_SIZE = 10; final int EXIT_FLAG = 99999; double sum = 0; double average = 0; double number; Scanner input = new Scanner(System.in); System.out.println("请输入最多10个double类型数值,输入99999可提前结束输入:"); while (true) { // 先判断是否已经存满10个,满了直接退出 if (doubleList.size() == MAX_SIZE) { System.out.println("已达到最大输入数量10,自动结束输入"); break; } System.out.print("请输入数值:"); number = input.nextDouble(); // 处理退出标识 if (number == EXIT_FLAG) { if (doubleList.isEmpty()) { // 列表为空时输入退出标识,提示错误不退出 System.out.println("错误:您必须输入至少一个有效数值,请重新输入"); continue; } // 列表不为空时正常退出 System.out.println("检测到退出指令,结束输入"); break; } // 存入有效数值 doubleList.add(number); sum += number; } // 后续业务逻辑示例,可按需修改 average = sum / doubleList.size(); System.out.println("输入的有效数值列表:" + doubleList); System.out.println("总和:" + sum); System.out.println("平均值:" + average); input.close(); } }
核心调整逻辑说明
- 统一将输入逻辑放在循环内处理,不需要单独读取首次输入,减少逻辑冗余
- 碰到退出标识
99999时优先判断列表是否为空,空列表则打印错误后直接进入下一轮循环要求用户重新输入,不会结束程序 - 直接用列表的
size()方法判断输入数量,不需要额外维护count变量,逻辑更清晰不易出错 - 加入了最大值、退出标识的常量定义,后续修改参数更方便
内容的提问来源于stack exchange,提问作者Avery Lytle
相关产品推荐
相关产品推荐

