我正在尝试编写一个 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) 按
。name
对 Student
对象进行排序)
有关在 Java 中使用 Comparable
的更多示例 https://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/
关于Java - while 循环即使在应该完成的时候仍然继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42451070/