首页 > 解决方案 > 当我使用 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!");
                    }
                }
            }
        }
    }
}

标签: javafor-loopif-statementarraylistwhile-loop

解决方案


这样做是因为每次通过你的循环,如果它不是你要找的学生,它会打印你在 else 语句中告诉它的内容。

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

声明时将其设置为 null。

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

如果它有一个答案(仍然不是空的)......那就是你将它输出给用户的时候。

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


推荐阅读