【问题标题】:java, correct number of inputs on one line entryjava,一行输入的正确输入数
【发布时间】:2015-09-18 04:30:42
【问题描述】:

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

我已经搜索了一段时间来寻找解决方案,但我找到的所有东西都不是我想要的。我认为做一段时间(scannerVariable != "\n") 会起作用,但是一旦我想了更多,我意识到这对我的问题没有任何帮助,因为每个数组只遇到一次换行符,而不管输入的数量。有问题的sn-p如下:

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的大小进行比较。不过,我认为这不可靠,而且我不确定如何为计数提取空白字符,除非我将所有输入都放入一个字符串并解析它。如果需要,我可以发布更多代码或提供更多详细信息。一如既往,感谢您的帮助!

【问题讨论】:

  • 我并不完全清楚您要做什么,但我会告诉您,您应该在 try-catch 块内执行 input.nextDouble() 以防用户输入例如文本而不是数字。

标签: java validation input


【解决方案1】:

这可以帮助你。允许在以空格分隔的行上输入数字的功能。有效数字存储在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);            
 }

【讨论】:

    【解决方案2】:

    在我看来,与其尝试预先计算输入的数量,不如尝试一个一个地读取它们,然后在它太长或太短时采取适当的措施。

    例如

    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.");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      • 2022-12-17
      相关资源
      最近更新 更多