Java 需要帮助创建面向对象的验证类吗
我的任务是创建一个面向对象的验证器。系统将提示用户输入一个整数,应用程序将对其进行验证。最终结果将在控制台上显示如下:前3个输入无效,第4个有效: 欢迎使用Validation Tester应用程序 智力测验 输入一个介于-100和100:X之间的整数 错误!无效的整数值。再试一次 输入一个介于-100和100之间的整数:-101 错误!数字必须大于-101 输入一个介于-100和100:101之间的整数 错误!数字必须小于101 输入一个介于-100和100:100之间的整数 我以前被指派创建一个验证类,但从来没有像现在被要求的那样。之前,我已经能够将sc和提示符传递给Validation类,并让方法相应地处理它们。例如: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之间的整数 我以前被指派创建
//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
}
}