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

如何验证Scanner输入,仅允许非负double值存入数组?

解决方案

你之前报错的原因很明确:hasNextDouble()只是判断下一个输入是否为double类型,并没有读取实际的数值,直接用<操作符判断大小当然会报错。下面给你两种可行的实现方式,按需选择:

方式一:直接在现有循环内修改(简便快速)

不需要额外写方法,直接在输入逻辑里加入非负检查,把整个输入验证放在一个循环里,直到用户输入符合要求为止:

import java.util.Scanner;

public class ArrayReview {
    public static void main(String[] args){
        double[] doublesArray = createArray();
        printArray(doublesArray);
    }

    // 创建存储10个非负double的数组
    public static double[] createArray() {
        Scanner userInput = new Scanner(System.in);
        double[] array = new double[10];
        System.out.println("请输入10个非负小数");
        
        for(int i = 0 ; i < array.length ; i++) {
            double inputVal;
            // 循环直到输入有效(是double且非负)
            while(true) {
                if(!userInput.hasNextDouble()) {
                    userInput.nextLine(); // 丢弃无效输入
                    System.out.println("请输入有效的小数");
                } else {
                    inputVal = userInput.nextDouble();
                    if(inputVal >= 0) {
                        break; // 符合条件,退出循环
                    } else {
                        System.out.println("请输入非负的小数");
                    }
                }
            }
            array[i] = inputVal;
        }
        userInput.close();
        return array;
    }

    // 打印double数组所有元素
    public static void printArray(double[] array) {
        for(int i = 0 ; i < array.length ; i++) {
            System.out.print(array[i] + " ");
        }
    }
}

方式二:单独编写验证方法(利于复用)

如果你的项目里有多处需要获取非负double输入,单独写一个可复用的验证方法会让代码更清晰、易维护:

import java.util.Scanner;

public class ArrayReview {
    public static void main(String[] args){
        double[] doublesArray = createArray();
        printArray(doublesArray);
    }

    // 创建存储10个非负double的数组
    public static double[] createArray() {
        Scanner userInput = new Scanner(System.in);
        double[] array = new double[10];
        System.out.println("请输入10个非负小数");
        
        for(int i = 0 ; i < array.length ; i++) {
            // 调用复用方法获取符合要求的输入
            array[i] = getNonNegativeDouble(userInput, "请输入第" + (i+1) + "个非负小数");
        }
        userInput.close();
        return array;
    }

    // 通用方法:获取非负double输入
    public static double getNonNegativeDouble(Scanner scanner, String prompt) {
        double value;
        while(true) {
            System.out.println(prompt);
            if(!scanner.hasNextDouble()) {
                scanner.nextLine(); // 丢弃无效输入
                System.out.println("请输入有效的小数");
            } else {
                value = scanner.nextDouble();
                if(value >= 0) {
                    return value;
                } else {
                    System.out.println("请输入非负的小数");
                }
            }
        }
    }

    // 打印double数组所有元素
    public static void printArray(double[] array) {
        for(int i = 0 ; i < array.length ; i++) {
            System.out.print(array[i] + " ");
        }
    }
}

选择建议

  • 如果只是当前这个方法需要非负验证,用方式一更直接,不用额外拆方法;
  • 如果后续有多处类似输入需求,方式二的复用性更强,代码结构也更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:10:50