gpt4 book ai didi

java - 当我使用 If 条件循环遍历 ArrayList 时,会显示搜索到的项目之前的项目

转载 作者:行者123 更新时间:2023-12-02 08:56:29 25 4
gpt4 key购买 nike

我想创建一个面向对象的程序,它由存储在 Grade 类的 ArrayList 中的学生组成。每个学生都有名字、姓氏和年龄。所以我想要完成的是使用Scanner在控制台中获取ArrayList中某个学生的所有信息。因此,我基本上存储用户给定的值,并使用 for 循环将其在 if 语句中与 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!");
}
}
}
}
}
}
  • 您的学生上哪个类(class)?
  • (用户输入)WG 13-1
  • 您要找 13-1 类的哪位学生?
  • (用户输入)Derin
  • 该类(class)不存在该学生!
  • 该类(class)不存在该学生!
  • 您的学生:
  • 德林
  • 西帕希
  • 19
  • 您的学生上哪个类(class)?

最佳答案

它这样做是因为每次循环时,如果它不是您正在寻找的学生,它就会打印您在 else 语句中告诉它的内容。

您需要做的是根本不要添加“else”。相反,当您在“if”内找到学生时……将其存储到变量中,以便稍后在完全脱离循环后进行分析。请记住在循环之前声明此存储变量,以便在不再处于循环中时您可以使用它。它可能是一个字符串,用于构建您发送到输出的整个答案......但在这种情况下,我们将存储它以供稍后显示。

声明时将其设置为 null。

然后,当你完全完成你的循环...中断与否...你测试该变量,这就是你可以判断它是否找到任何东西的地方(如果它仍然为空或不为空。)你知道通过测试它是否仍然为空,或者在循环中是否填充了答案。

如果其中有答案(仍然不为空)...那就是您将其输出给用户的时候。

如果仍然为空...那就是您告诉用户您没有找到任何这样的学生的时候。

关于java - 当我使用 If 条件循环遍历 ArrayList 时,会显示搜索到的项目之前的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60458734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com