java - 当我使用 If 条件循环遍历 ArrayList 时,显示搜索到的项目之前的项目
问题描述
我想创建一个面向对象的程序,该程序由存储在 Grade 类的 ArrayList 中的学生组成。每个学生都有姓名、姓氏和年龄。所以我想要完成的是通过使用扫描仪在控制台的 ArrayList 中取回一个学生的所有信息。所以我基本上存储用户给定的值,并在 if 语句中使用 for 循环将其与 ArrayList 中的姓名或姓氏进行比较。如果传递的姓名不等于 ArrayList 中的姓名之一,则会出现一条消息,指出此人不存在于该年级中。
它可以工作,但是如果我循环遍历 ArrayList 以获取索引 2 上的人员,则该人员在该等级中不存在的消息会针对索引 0 和 1 弹出,我不希望这样。
我来自德国,这就是为什么大部分东西都是用德语写的。这是代码:
package package_Fachklassen;
import java.util.Scanner;
public class Startklasse {
public static void main(String[] args) {
// TODO Auto-generated method stub
Schoolclass sk1, sk2;
sk1 = new Schoolclass("WG 13-1");
sk2 = new Schoolclass("WG 13-2");
//Klasse 13-1
Student s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;
s1 = new Student ("Gonzalo", "Cofre Real", 18, sk1);
s2 = new Student ("Swaastika", "Yogeswaran", 20, sk1);
s3 = new Student ("Derin", "Sipahi", 19, sk1);
s4 = new Student ("Henry", "Reinhold", 19, sk1);
s5 = new Student ("Sara", "Perkovic", 19, sk1);
s6 = new Student ("Honia", "Aref", 19, sk1);
s7 = new Student ("Finn", "Bolheimer", 17, sk1);
s8 = new Student ("Karoline", "Garkos", 18, sk1);
s9 = new Student ("Hannah", "Hirth", 18, sk1);
s10 = new Student ("Sarah", "Schwarz", 18, sk1);
sk1.addStudent (s1);
sk1.addStudent (s2);
sk1.addStudent (s3);
sk1.addStudent (s4);
sk1.addStudent (s5);
sk1.addStudent (s6);
sk1.addStudent (s7);
sk1.addStudent (s8);
sk1.addStudent (s9);
sk1.addStudent (s10);
//Klasse 13-2
Student ss1, ss2, ss3, ss4, ss5, ss6;
ss1 = new Student ("Cem", "Yildiz", 19, sk2);
ss2 = new Student ("Fathima", "Baba", 19, sk2);
ss3 = new Student ("Sanjie", "Bislimi", 19, sk2);
ss4 = new Student ("Jasmine", "Jaffari", 19, sk2);
ss5 = new Student ("Hannah", "Arent", 19, sk2);
ss6 = new Student ("Niklas", "Genf", 18, sk2);
sk2.addStudent (ss1);
sk2.addStudent (ss2);
sk2.addStudent (ss3);
sk2.addStudent (ss4);
sk2.addStudent (ss5);
sk2.addStudent (ss6);
while(true) {
Scanner scan = new Scanner(System.in);
System.out.println("Which class does your student visit?");
String k_input= scan.nextLine();
if(k_input.equals(sk1.getDescription())) {
System.out.println("For which student in class 13-1 are you looking for?");
String n_input = scan.nextLine();
for(int i = 0; i < sk1.getListLength(); i++) {
if(n_input.equals(sk1.getStudent(i).getName()) || n_input.equals(sk1.getStudent(i).getSurname())) {
System.out.println("Your student:");
System.out.println(" " + sk1.getStudent(i).getName());
System.out.println(" " + sk1.getStudent(i).getSurname());
System.out.println(" " + sk1.getSchueler(i).getAge());
break;
}
else if(){
System.out.println("Student does not exist in this class!");
}
}
}
}
}
}
- 你的学生上哪个班?
- (用户输入)WG 13-1
- 您在寻找 13-1 班的哪个学生?
- (用户输入)Derin
- 该班级不存在学生!
- 该班级不存在学生!
- 你的学生:
- 德林
- 西帕希
- 19
- 你的学生上哪个班?
解决方案
这样做是因为每次通过你的循环,如果它不是你要找的学生,它会打印你在 else 语句中告诉它的内容。
您需要做的是根本不要添加“其他”。相反,当您在“如果”中找到学生时……将其存储到一个变量中,以便在您完全脱离循环后进行分析。请记住在循环之前声明此存储变量,以便在您不再处于循环中时对其具有范围。它可能是一个字符串,可以构建您发送到输出的整个答案......但在这种情况下,我们将其存储起来以供稍后显示。
声明时将其设置为 null。
然后,当你完全完成你的循环......是否中断......你测试那个变量,这就是你可以判断它是否找到任何东西的地方(如果它仍然为空。)你知道通过测试 if它仍然为空,或者如果它在循环中充满了答案。
如果它有一个答案(仍然不是空的)......那就是你将它输出给用户的时候。
如果仍然为空......那就是当你告诉用户你没有找到任何这样的学生的时候。
推荐阅读
- android - 无法将字符串 Json 解析为 Json 对象
- json - Laravel 5.5 json 验证规则失败
- javascript - React Native - “未定义不是对象(评估'MyApp.navigation.openDrawer')
- php - 单页上的 Concrete5 Express 列表的命名空间问题
- javascript - JavaScript 代码在我的 Apache 服务器上运行时抛出错误,但在 CodePen 中运行良好
- file - 如何从 Julia 的工作目录中删除文件?
- react-native - 更改名称后道具的价值未定义,但她在那里
- python - 在 linux 机器中读取 parquet 文件
- c++ - 枚举的 C++ 矩阵
- notificationmanager - Android 通知警告日志消息