【问题标题】:Finding specific instance of class? [duplicate]寻找特定的类实例? [复制]
【发布时间】:2018-04-30 03:38:56
【问题描述】:

我刚开始学习 java,我正在尝试创建一个应用程序来注册学生。

基于这个问题how-would-i-create-a-new-object...我创建了一个while循环来创建一个类的实例。

    public class RegStudent {

    ArrayList<Student> studentList = new ArrayList<>();

    Scanner input = new Scanner(System.in);

    public void reggaStudent(int start) {

        while (start != 0) {
            String programNamn, studNamn;   
            int totalPoint, antalKurser;

            System.out.println("Vad heter programmet?");
            programNamn = input.nextLine();
            System.out.println("Vad heter studenten");
            studNamn = input.nextLine();
            System.out.println("Hur många poäng har studenten?");
            totalPoint = input.nextInt();
            System.out.println("Hur många kurser är studenten registrerad på?");
            antalKurser = input.nextInt();

            // Add student to list of students
            studentList.add(new Student(totalPoint, antalKurser, 
                                        programNamn, studNamn));
            System.out.println("Vill du registrera in en fler studenter? "
                                + "Skriv 1 för ja och 0 för nej");
            start = input.nextInt();
            input.nextLine();
        } // End of whileloop

    }
}

班级是:

public class Student {
    private int totalPoint;
    private int antalKurser;
    private String programNamn;
    private String studNamn;
    private static int counter;

    public Student(int totalPoint, int antalKurser, String program, String studNamn) {

        this.totalPoint = totalPoint;
        this.antalKurser = antalKurser;
        this.programNamn = program;
        this.studNamn = studNamn;
        counter++;
    }

    public int getTotalPoint() {
        return totalPoint;
    }

    public void setTotalPoint(int totalPoint) {
        this.totalPoint = totalPoint;
    }

    public int getAntalKurser() {
        return antalKurser;
    }

    public void setAntalKurser(int antalKurser) {
        this.antalKurser = antalKurser;
    }

    public String getProgramNamn() {
        return programNamn;
    }

    public void setProgramNamn(String programNamn) {
        this.programNamn = programNamn;
    }

    public String getStudNamn() {
        return studNamn;
    }

    public void setStudNamn(String studNamn) {
        this.studNamn = studNamn;
    }
    public static int getCount(){

        return counter;
    }
    @Override
    public String toString() {

        return String.format(" Namn: %s, Program: %s, Antal poäng: %d, "
        + "Antal kurser: %d\n ", studNamn, programNamn, totalPoint, antalKurser);
    }

}

如何获取和设置特定实例中的实例变量?即找到实例。

我知道这可能是糟糕的设计,但在这种情况下,我希望能提供一些关于如何解决我想实例化未知数量学生的情况的意见。

我添加了一个计数器只是为了查看我实际创建了该类的一些实例。

【问题讨论】:

  • 我完全不明白你在问什么。您想知道如何从您的列表中获得特定的学生吗?例如按名称 (stugNamn)?
  • 什么是studentList?它是如何声明的?
  • 是的,完全正确!或者设置 totalPoint 或者其他变量。
  • @Code-Apprentice 抱歉,与声明列表的整个班级一起编辑。

标签: java object arraylist


【解决方案1】:

您只需查询对象的某些属性,例如:

for (Student student : studentList) {
  if (student.getProgramName().equals("whatever")) {
    some match, now you know that this is the student you are looking for

换句话说:当您在某个集合中有对象,并且您想要获取一个/多个具有某些属性的对象时......然后您迭代集合并根据您的搜索条件测试每个条目。

或者,您可以“外部化”一个属性,并开始将对象放入地图中。

【讨论】:

  • 当然,谢谢!我不知道为什么我期待一个更复杂的解决方案。阅读有关地图的信息,但由于我刚开始使用 Java(和编程),因此我认为我已经对此感到头疼了。
  • 嗯,仍然没有真正了解如何设置新名称。一直在寻找一个小时,但找不到解决方案。我不需要找到要设置新值的特定元素的索引吗?如果我想 studentList.set(1, "Peter") 那么我需要索引但是当列表是类的对象时我找不到获取索引的方法,即包含几个不同类型的实例变量。
  • 在我的示例中 - 您已经将那个“学生”变量指向集合中的当前元素。当您现在在该引用上调用 setter 方法时 - 相应的对象将被更新。我希望这会有所帮助,如果不给我评论,我会看看明天我能做什么。
  • 可爱!我不明白,当循环以某种方式“获取”类的实例并使得可以只使用“正常”方法来获取/设置/以及非该特定实例的字段时,循环迭代它。我不需要使用来自的方法
【解决方案2】:
 studentList.add(new Student(totalPoint, antalKurser, 
                                    programNamn, studNamn));

现在您的Student 对象已在列表中。我假设你有类似的东西

List<Student> studentList = new ArrayList<>();

在您的代码中的某处。使用Student 对象填充列表后,您可以使用它来查找实例。您需要决定使用什么标准进行搜索。您想查找具有特定姓名的学生吗?您想查找给定程序中的所有学生吗?你想找到分数超过一定数量的学生吗?

也许你想做这些。从挑选一个开始,然后拿一张纸写下你将如何进行搜索的一些想法。例如,假设您要查找名为“Bill”的学生。想象一下,给你一叠卡片,上面有学生的信息。这堆卡片代表程序中的列表。你将如何在这叠卡片中搜索上面有比尔名字的卡片? 用文字描述您需要采取的步骤。不要担心你将如何编码。编写计算机程序的第一步是将解决方案分解成小步骤。在您清楚地了解如何在物理世界中手动完成此操作后,您可以将您的描述翻译成 Java 代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多