Java 需要帮助创建面向对象的验证类吗

Java 需要帮助创建面向对象的验证类吗,java,class,validation,object,Java,Class,Validation,Object,我的任务是创建一个面向对象的验证器。系统将提示用户输入一个整数,应用程序将对其进行验证。最终结果将在控制台上显示如下:前3个输入无效,第4个有效: 欢迎使用Validation Tester应用程序 智力测验 输入一个介于-100和100:X之间的整数 错误!无效的整数值。再试一次 输入一个介于-100和100之间的整数:-101 错误!数字必须大于-101 输入一个介于-100和100:101之间的整数 错误!数字必须小于101 输入一个介于-100和100:100之间的整数 我以前被指派创建

我的任务是创建一个面向对象的验证器。系统将提示用户输入一个整数,应用程序将对其进行验证。最终结果将在控制台上显示如下:前3个输入无效,第4个有效:

欢迎使用Validation Tester应用程序

智力测验

输入一个介于-100和100:X之间的整数

错误!无效的整数值。再试一次

输入一个介于-100和100之间的整数:-101

错误!数字必须大于-101

输入一个介于-100和100:101之间的整数

错误!数字必须小于101

输入一个介于-100和100:100之间的整数

我以前被指派创建一个验证类,但从来没有像现在被要求的那样。之前,我已经能够将sc和提示符传递给Validation类,并让方法相应地处理它们。例如:

    //MAIN 
    Scanner sc = new Scanner(System.in);
    int x = Validator.getInt(sc, "Enter an integer:     ", 0, 1000);

    //VALIDATION CLASS
    public class Validator{ 

    public static int getInt(Scanner sc, String prompt)
    {
        int i = 0;
        boolean isValid = false;
        while (isValid == false)
        {
            System.out.print(prompt);
            if (sc.hasNextInt())
            {
                i = sc.nextInt();
                isValid = true;
            }
            else
            {
                System.out.println("Error! Invalid integer value. Try again.");
            }
            sc.nextLine();  // discard any other data entered on the line
        }
        return i;
    }

    public static int getInt(Scanner sc, String prompt,
    int min, int max)
    {
        int i = 0;
        boolean isValid = false;
        while (isValid == false)
        {
            i = getInt(sc, prompt);
            if (i <= min)
                System.out.println(
                    "Error! Number must be greater than " + min + ".");
            else if (i >= max)
                System.out.println(
                    "Error! Number must be less than " + max + ".");
            else
                isValid = true;
        }
        return i;
    }
我没有要求任何人全部为我做作业,但是我不知道如何使用一个将sc和prompt分开的类来提示用户和传递用户的输入


我已经尝试了几种不同的方式来编写代码,但没有编译。

只需创建类的实例

//MAIN 
Scanner sc = new Scanner(System.in);
OOValidator val = new OOValidator(sc);
int x = val.getInt("Enter an integer:     ");
// ...
int y = val.getIntWithinRange("Enter an integer:     ", 0, 1000);

//VALIDATION CLASS
public class OOValidator {

    private Scanner sc;
    private static final String ERROR = "Error! Invalid integer value." 
                                            +  "Try again.";
    public OOValidator(Scanner sc) {
        this.sc = sc;
    }

    public int getInt(String prompt) {
        while (true) {
            System.out.print(prompt);
            if (sc.hasNextInt()) {
                i = sc.nextInt();
                sc.nextLine();  // discard any other data entered on the line
                break;
            } else {
                System.out.println(ERROR);
                sc.nextLine();  // discard any other data entered on the line
            }
        }
        return i;
    }

    public int getIntWithinRange(String prompt, int min, int max) {
        // same logic - use directly sc which is an instance field
    }
}

请使用更多类似java的格式-java程序员很难阅读您的代码-通常的样式是同一行上的大括号同一行上的大括号?你能给我举个例子吗。我试图使它尽可能简单。intx=newoovalidatorsc.getIntsc,输入一个整数:;这只需要一个小的编辑,我删除了sc,只通过了提示。尽管如此,我没有意识到我能做到这一点。这个语法到底是怎么说的?@DeuceCarter:是的,这是一个输入错误-它所做的是创建一个OOValidator类的实例一个OOValidator对象并调用它的方法-为Clarity编辑-我意识到在您的编辑中,您已经更改了它,所以首先创建OOValidator,然后通过将它附加到变量来调用该方法。这很有意思,因为初始语法也起作用,所有的东西都放在一行中。@DeuceCarter:是的-使用初始语法,我创建了一个对象来调用它的一个方法-然后该对象将被丢弃-通常您希望将该对象保留在一个变量中,以便像我在编辑中所做的那样重用它。
//MAIN 
Scanner sc = new Scanner(System.in);
OOValidator val = new OOValidator(sc);
int x = val.getInt("Enter an integer:     ");
// ...
int y = val.getIntWithinRange("Enter an integer:     ", 0, 1000);

//VALIDATION CLASS
public class OOValidator {

    private Scanner sc;
    private static final String ERROR = "Error! Invalid integer value." 
                                            +  "Try again.";
    public OOValidator(Scanner sc) {
        this.sc = sc;
    }

    public int getInt(String prompt) {
        while (true) {
            System.out.print(prompt);
            if (sc.hasNextInt()) {
                i = sc.nextInt();
                sc.nextLine();  // discard any other data entered on the line
                break;
            } else {
                System.out.println(ERROR);
                sc.nextLine();  // discard any other data entered on the line
            }
        }
        return i;
    }

    public int getIntWithinRange(String prompt, int min, int max) {
        // same logic - use directly sc which is an instance field
    }
}