使用Java中的if语句创建用户友好的界面

使用Java中的if语句创建用户友好的界面,java,Java,我不想让用户因为什么都不返回而陷入困境。通常我可以使用一个简单的if-else语句来纠正这个问题,但是由于它嵌套在for循环中,所以我并没有得到很好的结果。以下是我的返回学生代码,附在模块上: System.out.print("Search for a student: "); scan = new Scanner(System.in); String searchStudent = scan.nextLine()

我不想让用户因为什么都不返回而陷入困境。通常我可以使用一个简单的if-else语句来纠正这个问题,但是由于它嵌套在for循环中,所以我并没有得到很好的结果。以下是我的返回学生代码,附在模块上:

System.out.print("Search for a student: ");
                    scan = new Scanner(System.in);
                    String searchStudent = scan.nextLine().trim();

                    for (Student student : students) {
                        if (searchStudent.equalsIgnoreCase(student.getName())) {
                            Iterator it = modules.iterator();
                            Boolean found = false;
                            while (it.hasNext() && !found) {
                                Module module = (Module) it.next();
                                if (module.getStudents().contains(student)) {
                                    System.out.printf("%s ", module.getName());
                                    found = true;
                                }

                            }
                        } else {
                            System.out.println("Sorry. " + searchStudent + " does not exist in the database");
                        }
                    }
输出:

Search for a student: jane
UFCE3 UFCE1 Sorry. jane does not exist in the database
Sorry. jane does not exist in the database
Sorry. jane does not exist in the database
Sorry. jane does not exist in the database
显然,在本例中,Jane确实存在于数据库中,并且她在UFCE3和UFCE1上注册


由于if语句嵌套在for循环中,因此我不希望得到不准确的输出,因为for循环将继续循环,直到传递了student数组中的所有元素。有什么建议吗?

将for循环提取到方法中,返回您感兴趣的模块

然后调用该方法。检查你是否得到任何有用的结果并打印出来,否则打印你的借口

这被称为关注点分离。一个实体应该只做一件事。for循环至少执行三项操作:

  • 寻找学生
  • 搜索模块
  • 打印结果

将for循环提取到方法中,返回您感兴趣的模块

然后调用该方法。检查你是否得到任何有用的结果并打印出来,否则打印你的借口

这被称为关注点分离。一个实体应该只做一件事。for循环至少执行三项操作:

  • 寻找学生
  • 搜索模块
  • 打印结果

您可以在while语句中添加一个简单的sentinel值(布尔标志)。将该值设置为false,然后在找到记录时将其更改为true

Boolean found = false;
 while (it.hasNext() && !found) {
                 Module module = (Module) it.next();
                 if (module.getStudents().contains(student)) {
                            System.out.printf("%s ", module.getName());
                            found = true;
                  }
或者可以使用“break”语句终止循环

 while (it.hasNext() ) {
                 Module module = (Module) it.next();
                 if (module.getStudents().contains(student)) {
                            System.out.printf("%s ", module.getName());
                            break;
                  }

您可以在while语句中添加一个简单的sentinel值(布尔标志)。将该值设置为false,然后在找到记录时将其更改为true

Boolean found = false;
 while (it.hasNext() && !found) {
                 Module module = (Module) it.next();
                 if (module.getStudents().contains(student)) {
                            System.out.printf("%s ", module.getName());
                            found = true;
                  }
或者可以使用“break”语句终止循环

 while (it.hasNext() ) {
                 Module module = (Module) it.next();
                 if (module.getStudents().contains(student)) {
                            System.out.printf("%s ", module.getName());
                            break;
                  }

尝试使用方法并返回内容,而不仅仅是打印到控制台。这可以让你更好地控制你的程序流程。你可以包括学生的声明吗?试着使用方法并返回内容,而不仅仅是打印到控制台。这让你可以更好地控制你的程序的流程。你能包括学生的声明吗?@Boundless你的第一个选项看起来应该有效,但我仍然返回与以前相同的结果。我编辑了这篇文章以显示这些更改。@MikeGittins确保也将检查添加到您的第二个打印语句中:否则如果(!found){System.out.println(“对不起,“+searchStudent+”在数据库中不存在”);@Boundless您的第一个选项看起来应该可以使用,但我仍然返回与以前相同的结果。我已编辑帖子以显示这些更改。@MikeGittins确保也将检查添加到您的第二个打印语句中:否则如果(!found){System.out.println(“对不起”。+searchStudent+“数据库中不存在”);