Java - while 循环即使在应该完成的时候仍然继续

标签 java

我正在尝试编写一个 Controller ,它检查输入以从“学生”列表中获取正确的名称,并且以某种方式,即使我给出了正确的名称,循环也会继续。 我确信我错过了一些非常明显的东西。

这是代码:

Scanner sc = new Scanner(System.in);

String str = sc.nextLine();

while (!students.contains(str)){
  System.out.println("Try again");
  str = sc.nextLine();
}

编辑: 问题出在“学生”列表中的类(class),类(class)和列表如下所示:

// this gets filled right from a txt
List<Student> students = new ArrayList<>();

public class Student{
    private String name;
    private int gradeCount;
    private int average;
    private boolean homeWork;
    ...
}

我想检查这个类中的名称数据成员

最佳答案

您无法在 Student 列表中搜索 String。您需要编写自己的 contains() 方法,可能如下所示:

public boolean contains(List<Student> list, String s) {
    for(Student student : list) 
        if(student.getName().equals(s)) return true;
    return false;
}

然后你可以这样做:

Scanner sc = new Scanner(System.in);

while (!contains(students, sc.nextLine()))
  System.out.println("Try again");

这当然是假设你有一个 name 的 getter。

另一个选择是让您的 Student 实现 Comparable,以便您可以使用各种 Collections 方法,并且可以比较 Student 互相反对。一个例子是:

public class Student implements Comparable<Student> {
    private String name;

    public Student(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public int compareTo(Student s2) {
        return name.compareTo(s2.getName());
    }
}

然后您可以执行以下操作:

ArrayList<Student> students = new ArrayList<>();
students.add(new Student("Chris"));
students.add(new Student("John"));
students.add(new Student("Frank"));
students.add(new Student("Devon"));

Student me = new Student("Chris");
students.contains(me); // true

由于您现在已经实现了 Comparable,因此您还可以使用 Collections.sort(students) 按 nameStudent 对象进行排序)

有关在 Java 中使用 Comparable 的更多示例 https://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/

关于Java - while 循环即使在应该完成的时候仍然继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42451070/

相关文章:

java - 在 JavaFX 饼图中显示附加标签

java - 如何将一个 EJB 3.1 注入(inject)另一个 EJB

java - 如何使用java计算sql中表的一列中的不同值

java - 使用 Eclipse Code Formatter 在其自己的行上配置枚举常量

java - 连接 2 个数组的输出不符合预期

javascript - Selenium : How to enter text in div inside an iframe

java - WatchService 在集成测试中不起作用

java - 使用反射创建 ArrayList 的实例

java - 在哪里存储 Apache Commons Math 以及如何实际导入它?

java - Graphics2D 最快的渲染方法是什么?