【问题标题】:How to validate these inputs?如何验证这些输入?
【发布时间】:2017-04-23 06:13:19
【问题描述】:

我编写了一个简单的程序。它从用户那里获取两个整数并将奇数返回给用户。我验证它们以强制用户只输入整数。 当用户键入其他数据类型时,程序会给他我的自定义错误。直到现在,但是当发生这种情况时,用户必须从头开始输入输入。这意味着程序将用户带到第一个家。 这是我的主要课程:

package train;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Calculate cal = new Calculate();
        Scanner input = new Scanner(System.in);
        int number1 = 0;
        int number2 = 0;
        boolean isNumber;

        do {
            System.out.println("enter number1 please : ");
            if (input.hasNextInt()) {
                number1 = input.nextInt();
                isNumber = true;
                System.out.println("enter number2 please : ");
            }
            if (input.hasNextInt()) {
                number2 = input.nextInt();
                isNumber = true;

            } else {
                System.out.println("wrong number!");
                isNumber = false;
                input.next();
            }

        } while (!(isNumber));

        cal.setNumbers(number1, number2);
        cal.result();
        input.close();
    }
}

这是我的计算类,它返回奇数:

public class Calculate {

    private int minNumber;
    private int MaxNumber;

    public void setNumbers(int min, int max) {
        this.minNumber = min;
        this.MaxNumber = max;
    }

    public void result() {
        int count = 0; // number of results
        ArrayList<Integer> oddNumber = new ArrayList<Integer>(); // array of odd numbers

        // get odd numbers
        for (int i = minNumber; i < MaxNumber; i++) {

            if ((i % 2) != 0) {
                oddNumber.add(i);
                count++;
            }
        }

        int i = 0;// counter for printing array
        while (i < oddNumber.size()) {
            if(i != oddNumber.size()){
                System.out.print(oddNumber.get(i) + ",");
            }else{
                System.out.println(oddNumber.get(i));
            }
            i++;
        }

        // print result numbers
        System.out.println("\nResult number : " + count);

        // print number range
        System.out.println("You wanted us to search between " + minNumber
            + " and " + MaxNumber);

    }

}

【问题讨论】:

  • 但是我发现接受的解决方案无法解决所提出的问题,就像第二个输入是non-integer 然后它会再次询问第一个输入,这是实际问题。您仍然接受了答案,所以如果我理解错误,请纠正我。

标签: java validation input


【解决方案1】:

创建一个方法verifyAndGetNumber,它将使用正则表达式\d+ 验证一个数字,这意味着匹配一个或多个数字。如果不是数字,则抛出异常。捕获异常并打印您的自定义消息。

public static void main(String[] args) {
    Calculate cal = new Calculate();
    Scanner input = new Scanner(System.in);
    int number1 = 0;
    int number2 = 0;
    boolean isNumber = false;

    do {
        try {
            System.out.println("enter number1 please : ");
            if (input.hasNextLine()) {
                number1 = verifyAndGetNumber(input.nextLine());
            }

            System.out.println("enter number2 please : ");
            if (input.hasNextLine()) {
                number2 = verifyAndGetNumber(input.nextLine());
            }

            isNumber = true;
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    } while (!isNumber);

    cal.setNumbers(number1, number2);
    cal.result();
    input.close();
}

private static int verifyAndGetNumber(String line) throws Exception {
    if (line.matches("\\d+")) {
        return Integer.parseInt(line);
    }
    throw new Exception("wrong number!");
}

【讨论】:

    【解决方案2】:

    您可以统计用户输入的Integer 的数量,这样您就可以解决问题。

    所以你可以修改代码为:

    导入 java.util.Scanner;

    public class Main {
    
        public static void main(String[] args) {
            Calculate cal = new Calculate();
            Scanner input = new Scanner(System.in);
            int number1 = 0;
            int number2 = 0;
            boolean isNumber;
            int totalEnteredNumbers=0;
            int currNumber=1;
            do {
                System.out.println("enter number"+currNumber+" please : ");
                if (totalEnteredNumbers==0 && input.hasNextInt()) {
                    number1 = input.nextInt();
                    isNumber = true;
                    currNumber++;
                    System.out.println("enter number"+currNumber+" please : ");
                    totalEnteredNumbers++;
                }
                if (totalEnteredNumbers==1 && input.hasNextInt()) {
                    number2 = input.nextInt();
                    isNumber = true;
    
                } else {
                    System.out.println("wrong number!");
                    isNumber = false;
                    input.next();
                }
    
            } while (!(isNumber));
    
            cal.setNumbers(number1, number2);
            cal.result();
            input.close();
        }
    }
    

    无论如何,您也可以将boolean 变量isNumber 从终止条件中删除,方法是将其替换为while(totalEnteredNumbers&lt;2);

    不过这也可以用下面的代码解决:

    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
            Calculate cal = new Calculate();
            Scanner input = new Scanner(System.in);
            int number1 = 0;
            int number2 = 0;
    
            boolean numberTaken=false;
    
            while(!numberTaken)
            {
                System.out.print("Enter number1 : ");
                String ip=input.next();
                try
                {
                    number1=Integer.parseInt(ip); //If it is not valid number, It will throw an Exception
                    numberTaken=true;
                }
                catch(Exception e)
                {
                    System.out.println("Wrong Number!");
                }
            }
    
            numberTaken=false; //For second input
    
            while(!numberTaken)
            {
                System.out.print("Enter number2 : ");
                String ip=input.next();
                try
                {
                    number2=Integer.parseInt(ip); //If it is not valid number, It will throw an Exception
                    numberTaken=true;
                }
                catch(Exception e)
                {
                    System.out.println("Wrong Number!");
                }
            }
            cal.setNumbers(number1, number2);
            cal.result();
            input.close();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多