如果用户输入不正确,如何获取问题循环



每当用户输入不正确的数据时,该程序都会发出一条消息,告诉用户再试一次,但是然后返回到主菜单,而不是让用户尝试输入一个不同的值。我该怎么做?

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();
}

最新更新