-7

我不知道这段代码有什么问题。当我输入正确nomatric的匹配项时,它会显示正确但也会显示错误消息。

怎么了?

public void Search(int nomatric) {
    for (int i = 0; i < student.length; i++) {
        if (student[i].matrix == nomatric) {
            System.out.printf("%-25s%-25s%-25s%-25s%-25s\n", "Matric", "Name", "Course work", "Final exam", "Grade");
            System.out.printf("%-20d %-20s %-20.2f %-20.2f %-20s", student[i].matrix, student[i].name, student[i].coursework, student[i].finalexam, student[i].grade);
            System.out.println();
        }  
    }
    System.out.println("Cannot find the matric number!!!");
    System.out.println();
}
4

3 回答 3

2

使用一个标志变量。在 for 循环之前将其设置为 false。在循环内部,每当找到匹配项时,将此标志设置为 true。在循环外使用标志上的 if 条件。如果 flag 为 false 表示未找到匹配项,则仅打印错误。

  public void Search(int nomatric) {
     boolean flag=false;
     for (int i = 0; i < student.length; i++) {
     if (student[i].matrix == nomatric) {
        System.out.printf("%-25s%-25s%-25s%-25s%-25s\n", "Matric", "Name", "Course    work", "Final exam", "Grade");
        System.out.printf("%-20d %-20s %-20.2f %-20.2f %-20s", student[i].matrix,    student[i].name, student[i].coursework, student[i].finalexam, student[i].grade);
        System.out.println();
        flag=true;
    }  
 }
 if( ! flag) {
    System.out.println("Cannot find the matric number!!!");
    System.out.println();
 }
}
于 2012-12-26T05:20:35.397 回答
1

您的错误消息System.out.println("Cannot find the matric number!!!");在您的代码中是无条件的,因此它将始终显示该错误

于 2012-12-26T05:17:53.730 回答
1

你回来void了,所以你没有得到一个早期的、有意义的return块的便利。您确实需要表明您已经if以某种方式进入了该区块。你有两个*选项:

  • 使用布尔值表示,如果您已输入if块,则不应打印该消息,或者
  • 从方法返回String而不是隐式打印它,并让调用者打印返回消息。

(*:您也可以return从 if 语句中选择 ing,尽管不建议使用这种样式。这意味着,您无需使用boolean变量,而是return立即放置在 . 之后System.out.println()。)

使用选项一重写,您的方法如下所示:

public void search(int nomatric) {
    boolean success = false;
    for (int i = 0; i < student.length; i++) {
        if (student[i].matrix == nomatric) {
            success = true;
            System.out.printf("%-25s%-25s%-25s%-25s%-25s\n", "Matric", "Name", "Course work", "Final exam", "Grade");
            System.out.printf("%-20d %-20s %-20.2f %-20.2f %-20s", student[i].matrix, student[i].name, student[i].coursework, student[i].finalexam, student[i].grade);
            System.out.println();
        }  
    }
    if(!success) {

        System.out.println("Cannot find the matric number!!!");
        System.out.println();
    }
}

选项二留给读者作为练习。

于 2012-12-26T05:18:45.700 回答