【问题标题】:Scanner Input validation on a single entry line from user来自用户的单个输入行上的扫描仪输入验证
【发布时间】:2021-03-30 13:07:37
【问题描述】:

我让用户输入一串整数并将它们添加到 ArrayList,但是我需要验证每个条目是否为正整数。我尝试过 do/while 循环、嵌套的 while 循环、嵌套的 if 循环,每个都遇到了自己的问题。

作为我当前设置的示例: 用户输入例如:1 2 3 4 pageVar 是我的 Scanner,pageRef 是我的 ArrayList

System.out.println("Please enter the page reference string: ");
        while(pageVar.hasNext()) {
            if (pageVar.hasNextInt() && pageVar.nextInt() > 0) {
                pageRef.add(pageVar.nextInt());
            }
            else if (pageVar.nextInt() < 0) {
                System.out.println("Please enter valid page reference string: ");
            }
            else if (!pageVar.hasNext()) {
                pageVar.close();
            }
        }

在等待更多输入时,我运行它时卡住了,我无法确定如何打破它。

【问题讨论】:

    标签: java


    【解决方案1】:

    每次调用nextInt() 时都会消耗一个值。在比较之前存储值。

    while (pageVar.hasNextInt()) {
        int v = pageVar.nextInt();
        if (v > 0) {
            pageRef.add(v);
        } else {
            System.out.printf("%d: is not a valid reference value.%n", v);
        }
    }
    

    【讨论】:

    • 我已经输入了您的建议,但是我仍然卡在 while 循环中。我在循环外有一个打印语句来打印数组,但是它没有到​​达该语句。 ``` while (pageVar.hasNextInt()) { int v = pageVar.nextInt(); if (v > 0) { pageRef.add(v); System.out.println(pageRef); } else { System.out.printf("%d: 不是一个有效的参考值。%n", v); } } System.out.println("这里"); //没有到达这一行```
    • 输入不是int 的内容来结束循环。或者,关闭流。在 Windows 上按 ctrl-z,在所有其他平台上按 ctrl-d。
    【解决方案2】:

    //您可以尝试在使用 for 循环输入 int 时验证它? 导入 java.util.Scanner;

    公共类主要 {

    public static void main(String[] args)
    {
        Scanner kbd = new Scanner(System.in);
        
        int[] numbers = new int[4];
        
        
        for(int i = 0; i < numbers.length;i++)
        {
            System.out.println("Enter numbers: ");
            numbers[i] = kbd.nextInt();
            
            while(numbers[i] < 0)
            {
                System.out.println("Please enter a positive integer");
                numbers[i] = kbd.nextInt();
            }
        }
                
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 2013-11-25
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      相关资源
      最近更新 更多