每当用户输入不正确的数据时,该程序都会发出一条消息,告诉用户再试一次,但是然后返回到主菜单,而不是让用户尝试输入一个不同的值。我该怎么做?
public void createStudentRecord(Scanner in)
{
inputStudentID = null;
inputMark = 0;
System.out.println("Enter Student ID: ");
in.nextLine();
inputStudentID = in.nextLine();
if (!(inputStudentID.length()==6))
{
System.out.println("Enter a student ID that is 6 characters");
}
else
{
System.out.println("Enter Module Mark: ");
inputMark = in.nextInt();
if (inputMark <0 || inputMark >100)
{
System.out.println("PLease enter a module mark between 0-100");
}
else
{
addStudent(inputStudentID, inputMark);
System.out.println();
System.out.println("New student record has been " +
"successfully created");
System.out.println();
countRecords();
}
}
}
做到这一点的一种方法是循环直到看到正确/所需的输入。这种方法的一个问题是,如果用户未输入预期值(如果您要寻找的话(,它将永远不会终止。
代码段:
public void createStudentRecord(Scanner in) {
String inputStudentID = null;
int inputMark = 0;
while (true) {
System.out.println("Enter Student ID: ");
inputStudentID = in.nextLine();
if (!(inputStudentID.length() == 6)) {
System.out.println("Enter a student ID that is 6 characters");
} else {
break;
}
}
while (true) {
System.out.println("Enter Module Mark: ");
inputMark = Integer.parseInt(in.nextLine());
if (inputMark < 0 || inputMark > 100) {
System.out.println("PLease enter a module mark between 0-100");
} else {
break;
}
}
addStudent(inputStudentID, inputMark);
System.out.println("nNew student record has been successfully created.n");
countRecords();
}
解决此问题有两种方法。首先是循环每个变量直到给出有效的响应。
public void createStudentRecord(Scanner in)
{
inputStudentID = null;
inputMark = -1;
while (inputStudentID == null)
{
System.out.println("Enter Student ID: ");
inputStudentID = in.nextLine();
if (inputStudentID.length() != 6)
{
System.out.println("Enter a student ID that is 6 characters");
inputStudentID = null;
}
}
while (inputMark == -1)
{
System.out.println("Enter Module Mark: ");
inputMark = in.nextLine();
if (inputMark < 0 || inputMark > 100) {
System.out.println("PLease enter a module mark between 0-100");
inputMark = -1;
}
}
addStudent(inputStudentID, inputMark);
System.out.println();
System.out.println("New student record has been successfully created");
System.out.println();
countRecords();
}
第二个是使用递归。
public void createStudentRecord(Scanner in)
{
inputStudentID = null;
inputMark = 0;
System.out.println("Enter Student ID: ");
inputStudentID = in.nextLine();
if (inputStudentID.length() == 6)
{
System.out.println("Enter a student ID that is 6 characters");
createStudentRecord(in);
return;
}
System.out.println("Enter Module Mark: ");
inputMark = in.nextLine();
if (inputMark < 0 || inputMark > 100)
{
System.out.println("PLease enter a module mark between 0-100");
createStudentRecord(in);
return;
}
addStudent(inputStudentID, inputMark);
System.out.println("nNew student record has been successfully createdn");
countRecords();
}
将if-else语句更改为while语句。
public static void createStudentRecord(Scanner in)
{
inputStudentID = null;
inputMark = 0;
System.out.println("Enter Student ID: ");
in.nextLine();
inputStudentID = in.nextLine();
while (!(inputStudentID.length()==6))
{
System.out.println("Enter a student ID that is 6 characters");
}
System.out.println("Enter Module Mark: ");
inputMark = in.nextInt();
while (inputMark <0 || inputMark >100)
{
System.out.println("PLease enter a module mark between 0-100");
}
addStudent(inputStudentID, inputMark);
System.out.println();
System.out.println("New student record has been " +
"successfully created");
System.out.println();
countRecords();
}
另外,您可以设置超时变量来定义用户可以重试的最大次数。像,
public static void createStudentRecord(Scanner in)
{
int timeout1 = 3, timeout2 = 3;
inputStudentID = null;
inputMark = 0;
System.out.println("Enter Student ID: ");
in.nextLine();
inputStudentID = in.nextLine();
while (!(inputStudentID.length()==6))
{
System.out.println("Enter a student ID that is 6 characters");
--timeout1;
if( timeout1 == 0 ) {
System.out.println("say something here");
return;
}
}
System.out.println("Enter Module Mark: ");
inputMark = in.nextInt();
while (inputMark <0 || inputMark >100)
{
System.out.println("PLease enter a module mark between 0-100");
--timeout2;
if( timeout2 == 0 ) {
System.out.println("say something here");
return;
}
}
addStudent(inputStudentID, inputMark);
System.out.println();
System.out.println("New student record has been " +
"successfully created");
System.out.println();
countRecords();
}