我分配的工作是创建一个面向对象的验证器。提示用户输入整数,应用程序验证它。最终结果将显示在控制台上,如下所示(前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和提示符分隔的类。
我已经尝试了几种方法来编写几种差异方式,而不是编译方式。
答案 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
}
}