繁体   English   中英

如何从另一个类调用 ArrayList 方法?

[英]How do I call an ArrayList method from another class?

我正在为ArrayList类创建文本 UI,我正在尝试在调用ArrayList方法的第二个类中创建方法。 但是,当我尝试调用将对象添加到ArrayList的方法时,出现错误。

private void addStudent()
{
    labClass.enrollStudent();
}

我正在尝试从labClass类中调用方法enrollStudent() ,但它说

方法 enrollStudent 不能应用于给定类型

我到底需要做什么来调用这个方法? 这是我以前没有做过的事情。

如果需要,这里是同一类的完整源代码。

import java.util.Scanner;
import java.util.*;

public class TextUI
{

    private Scanner myScanner;
    private LabClass labClass;

    public TextUI()
    {
        myScanner = new Scanner(System.in);
        createLabClass();
    }

    public void menu()
    {
        int command = -1;
        while(command != 0)
        {
            displayMenu();
            command = getCommand();
            execute(command);
        }
    }

    public void displayMenu()
    {
        System.out.println("Select command: ");
        System.out.println("    Display Full Class Details: 1");
        System.out.println("    Add Student: 2");
        System.out.println("    Find Student by Name: 3");
        System.out.println("    Set Instructor: 4");
        System.out.println("    Set Room Mumber: 5");
        System.out.println("    Set Time and Day: 6");
        System.out.println("    Remove Student: 7");
        System.out.println("    Get Class Size: 8");
        System.out.println("    Terminate Program: 0");
    }

    private void createLabClass()
    {
        LabClass labClass = new LabClass();
    }

    private int getCommand()
    {
        System.out.print("Enter command: ");
        int command = myScanner.nextInt();
        return command;
    }

    private void execute(int command)
    {
        if(command == 0)
        {
            System.out.println("Terminating program...");
            System.exit(0);
        }
        else
        if(command == 8)
        {
            System.out.println("The class size is: " + getClassSize());
        }
    }

    private int getClassSize()
    {
        return labClass.getNumberOfStudents();
    }

    private void addStudent()
    {
        labClass.enrollStudent();
    }
}

这是 LabClass.enrollStudent 的代码

/**
 * Add a student to this LabClass.
 * @param newStudent the student object to be enrolled
 */
public void enrollStudent(Student newStudent)
{
    students.add(newStudent);
}

添加学生代码

private void execute(int command)
{
    if(command == 0)
    {
        System.out.println("Terminating program...");
        System.exit(0);
    }
    else if(command == 1)
    {
        labClass.getLabClass();
    } 
    else if(command == 2)
    {
        addStudent();
    }
}

看起来您正在覆盖您的类变量labClass在您的 createLabClass 方法中,删除领先的LabClass 它应该是这样的

private void createLabClass()
{
    labClass = new LabClass();
}

我认为正在发生的事情是您正在尝试访问labClass.enrollStudent(); 来自您的类变量,该变量从未实例化。 相反,您正在实例化一个从未使用过的本地版本

然后,当涉及到您的 LabClass 实现时,这样的事情就足够了

public class LabClass() {
    private ArrayList<Student> students = new ArrayList<>();

    public void enrollStudent(Student newStudent) {
        students.add(newStudent);
    }
}

显然,你的班级可能有更多,但在不了解它的情况下,我写得尽可能简短

因此,除了什么@布兰登&@丹尼斯说,事实证明,你在呼唤一个不带参数的enrollStudent方法。 您需要将Student对象传递给该方法。 另外,您需要将学生的数组列表声明为成员变量并对其进行初始化:

public class TextUI
{
     private List<Student> students = new ArrayList<Student>();
     private Scanner myScanner;
     private LabClass labClass;

     public TextUI()
     {
         myScanner = new Scanner(System.in);
         createLabClass();
     }
     .......
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM