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

时间:2014-10-12 20:58:13

标签: java class validation object

我分配的工作是创建一个面向对象的验证器。提示用户输入整数,应用程序验证它。最终结果将显示在控制台上,如下所示(前3个输入无效,第4个输入有效):


欢迎使用Validation Tester应用程序

Int Test

输入介于-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有自己的构造函数。


public class OOValidator 
{
    public OOValidator(Scanner sc){}
    public int getInt(String prompt){}
    public int getIntWithinRange(String prompt, int min, int max){}
}

我并没有要求任何人完全为我完成作业,但我不知道如何能够提示用户并通过用户的输入传递sc和提示符分隔的类。

我已经尝试了几种方法来编写几种差异方式,而不是编译方式。

1 个答案:

答案 0 :(得分:0)

只需创建一个类的实例

//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
    }
}