java,一行输入的正确输入数

时间:2015-09-18 04:30:42

标签: java validation input

请原谅我,如果已经问过这个问题,但是我正在尝试填充用户定义的大小数组,但是我想确保转储任何额外的输入或触发错误以重新输入输入。我的任务要求数组的所有输入都在一行上完成,空格分隔各个值。该程序工作正常,看到我们如何仍然在课程的开头,我不认为我们应该知道如何在一行上过滤输入数量,但这仍然是我的错

我已经找了一段时间寻找解决方案,但我发现的一切都不是我想要的。我想有一段时间(scannerVariable!=" \ n")会起作用,但是一旦我想到它,我就会意识到我不会为我的问题做任何事情,因为新行字符只是存在无论输入数量多少,每个数组都会遇到一次。问题的片段如下:

public static double[] getOperand(String prompt, int size)
{
    System.out.print(prompt);
    double array[];
    array = new double[size];
    for(int count = 0; count < size; count++)
    {
        array[count] = input.nextDouble();
    }
    return array;
}

我需要的是一些验证输入数量或转储/忽略额外输入的方法,这样缓冲区中就没有垃圾来跳过后面的输入。我能想到的唯一方法是计算空格数并将其与数组-1的大小进行比较。我不认为这是可靠的,我不知道如何为计数提取空白字符,除非我将所有输入都放入字符串并解析它。如果需要,我可以发布更多代码或提供更多详细信息。一如既往,感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

这可以帮到你。允许在由空格分隔的行上输入数字的函数。有效数字存储在类型Double的列表中。

public static void entersDouble () {
        Scanner input = new Scanner(System.in);
        String s;
        ArrayList<Double> numbers= new ArrayList<>();            
        System.out.print("Please enter numbers: ");           
        s=input.nextLine();
        String [] strnum = s.split("\\s+");

        int j=0;
        while(j<strnum.length){
            try {
                numbers.add(Double.parseDouble(strnum[j++]));
            }       
            catch(Exception exception) {
            }
        }   
        for (Double n : numbers)
            System.out.println(n);            
 }

答案 1 :(得分:0)

在我看来,不是试图预先计算出输入的数量,而是试图逐一阅读它们,然后在太长或太短时采取适当的行动。

例如

public static double[] getOperands(String prompt, int size) {
    double[] operands = new operands[size];
    while (true) {
        System.out.println(prompt);
        Scanner scanner = new Scanner(System.in);+
        int operandCount = 0;
        while (scanner.hasNextDouble()) {
            double val = scanner.nextDouble();
            if (operandCount < size) 
                operands[operandCount++] = val;
        }
        if (operandCount == size)
            return operands;
        else
            System.out.println("Enter " + size + " decimals separated by spaces.");
    }
}