Java - 虽然循环仍然继续,即使它应该完成
我想写一个控制器,检查输入从“学生”列表中获得正确的名称,并以某种方式,即使我给了正确的名称,循环继续。 我确定我错过了一些非常明显的东西。Java - 虽然循环仍然继续,即使它应该完成
下面是代码:
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
while (!students.contains(str)){
System.out.println("Try again");
str = sc.nextLine();
}
编辑: 问题是带班的“学生”名单这里的类和列表的样子:
// 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
。你需要编写自己的方法,可能是这样的:
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
现已实现,还可以通过name
使用Collections.sort(students)
排序Student
对象。
在Java中使用Comparable
https://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/
假设有一个为Student对象一个getter更多的例子,你可以Student
对象列表映射到学生的名字(字符串)的列表,然后在该执行.contains()
通话名单。所以,试试这个:
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
// Create a List<String> of student names
List<String> names = students
.stream()
.map(student -> student.getName())
.collect(Collectors.toList());
while (!names.getName().contains(str)){
System.out.println("Try again");
str = sc.nextLine();
}
用户底漆阅读:
import java.util.ArrayList;
import java.util.Scanner;
public class Sandbox {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
Boolean found = false;
String input;
ArrayList<Student> students = new ArrayList<Student>();
students.add(new Student("Jim"));
students.add(new Student("Kim"));
students.add(new Student("Bill"));
students.add(new Student("Betty"));
System.out.println("Enter the name of a student to check");
input = keyboard.nextLine();
if(students.get(0).getName().equals(input)) {
System.out.println("You found " + students.get(0).getName());
found = true;
keyboard.close();
}
while(!found) {
System.out.println("Try again");
input = keyboard.nextLine();
for(int i = 1; i < students.size(); i++) {
if(students.get(i).getName().equals(input)) {
System.out.println("You found " + students.get(i).getName());
found = true;
keyboard.close();
break;
}
}
}
}
Student类
public class Student {
String name;
public Student() {
}
public Student (String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
这段代码有什么问题?这正是他所说的他想做的。 –
扫描仪SC =新的扫描仪(System.in);
String str = null;
boolean isFound = false;
while(!isFound)
{
str = sc.nextLine();
(学生stdObj:学生)
if(stdobj.name。等于(str))
{
isFound = true;
break;
}
if(!isFound)
System.out.println(“Try again”);
}
你的学生数组列表已经有一些学生对象 – surajy79
你的学生列表是什么样的? – bejado
哦该死..这是一个列表,所以这可能是一个问题......:D对不起 –
geri
你的'学生'对象是什么样的? –