You need to enable JavaScript to run this app. Java Scanner输入校验异常:填充Double数组的for循环丢失有效输入
优惠活动
大模型
产品
解决方案
定价
更多

Java Scanner输入校验异常:填充Double数组的for循环丢失有效输入

问题根源
  • 循环逻辑存在核心偏差:原代码的for循环是固定次数执行,每一轮循环无论用户输入的内容是否合法,循环下标i都会自动自增。如果某一轮输入的圈速不符合范围,这一轮的数组位置会被留空,但已经消耗了一次输入提示机会,最终采集到的有效圈速数量会少于用户指定的总圈数,出现“有效输入被吞”的现象。
  • 校验和状态维护逻辑冗余:原代码中合法判断、非法判断的范围完全重叠,没有按照提示规则覆盖0值边界;单独维护的index变量和数组下标i容易出现状态不同步的问题,进一步加剧数据不一致。
修复方案
  • 调整循环驱动逻辑:将固定次数的for循环替换为按有效采集进度驱动的while循环,只有当成功存入一个合法圈速到数组时,才推进采集计数,直到凑够用户指定的总圈数为止。非法输入不会消耗采集配额,程序会停留在当前圈的输入提示,直到用户输入合法值。
  • 简化状态维护:不再单独维护圈号计数,已采集的有效圈数+1就是下一次需要提示的圈号,避免多变量不同步的问题。
  • 统一边界校验规则:按照提示要求,合法圈速范围为闭区间[0,60],不符合范围的输入直接触发错误提示,不推进采集进度。
修正后核心代码
import java.util.Scanner;
public class JK_FINALPRAC1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Time-Trial Statistics Program\n");
        System.out.println("This program will ask you to input split-times for each lap or length of a race. The ");
        System.out.println("program will then calculate some basic statistics from the split-times.\n");

        System.out.print("Enter the number of laps or lengths in the race: ");
        int arraySize = sc.nextInt();
        Double[] lapArray = new Double[arraySize];
        System.out.println("Now input the elapsed time (split time) in seconds for each lap/length of the race.");
        
        int collectedCount = 0;
        while (collectedCount < arraySize) {
            System.out.print("Time for lap or length #" + (collectedCount + 1) + ": ");
            double currentNum = sc.nextDouble();
            if (currentNum >= 0 && currentNum <= 60) {
                lapArray[collectedCount] = currentNum;
                collectedCount++;
            } else {
                System.out.println("Invalid input! Time must be between 0 and 60.");
            }
        }
        sc.close();
    }
}

调整后逻辑下,程序会始终提示用户输入对应序号的圈速,直到收集到足够的合法值才会退出循环,不会出现数组空值、有效数据被吞的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 07:06:04