Java 如何验证这些输入?

Java 如何验证这些输入?,java,validation,input,Java,Validation,Input,我写了一个简单的程序。它从用户那里得到两个整数,并向用户返回奇数。我验证它们以强制用户只键入整数。 当用户键入其他数据类型时,程序会给他我的自定义错误。这是目前为止的情况,但当这种情况发生时,用户必须从一开始就键入输入。这意味着程序会将用户带到第一个主页。 这是我的主要课程: package train; import java.util.Scanner; public class Main { public static void main(String[] args) {

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

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();
    }
}
这是我的calculate类,它返回奇数:

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);

    }

}
公共类计算{
米努姆私人酒店;
私有整数MaxNumber;
公共无效集合编号(最小整数、最大整数){
this.minNumber=min;
这个.MaxNumber=max;
}
公开结果(){
int count=0;//结果数
ArrayList oddNumber=新ArrayList();//奇数数组
//得到奇数
对于(int i=minNumber;i
您可以计算用户输入的
整数
输入的数量,这样您就可以解决问题

因此,您可以将代码修改为:

导入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();
    }
}

无论如何,您也可以在终止条件中删除
布尔
变量
isNumber
,方法是将其替换为
while(totalEnteredNumbers创建一个方法
verifyAndGetNumber
,该方法将使用regex
\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!");
}

然而,我发现接受的解决方案不会解决问题,就像第二个输入是
非整数
一样,然后它也会要求第一个输入,这是实际的问题。你仍然接受了答案,所以如果我理解错了问题,请纠正我。
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!");
}