0
public class Student {
    private String name;
    private String id;
    private String email;
    private  ArrayList<Student> s;

    public Student( String n, String i, String e)
    {
        n = name; i= id; e = email;
    }
}


public class Library {

    private  ArrayList<Student> s;

    public void addStudent(Student a)
    {
        s.add(a);
    }


    public static void main(String[] args)
    {
        Student g = new Student("John Elway", "je223", "j@gmail.com");
        Student f = new Student("Emily Harris", "emmy65", "e@yahoo.com");
        Student t = new Student("Sam Knight", "joookok", "fgdfgd@yahoo.com");

        s.addStudent(g);
        s.addStudent(f);
        s.addStudent(t);
    }

    }

似乎我的学生对象将被添加到学生的数组列表中,但它不是那样工作的。由于 arraylist 在库类而不是 Student 类中,它是否不起作用?

4

4 回答 4

3

不应该是你的构造函数吗?

public Student( String n, String i, String e)
{
    name = n; id = i; email = e;
}
于 2013-09-25T01:33:53.273 回答
3

您的代码有几个问题:

  1. main是一个static方法,这意味着它在任何实例的上下文之外执行Library。但是,s是 的实例字段Library。您应该创建s一个static字段或创建一个实例Library并通过该实例引用该字段:

    public static void main(String[] args) {
        Library lib = new Library();
        . . .
        lib.addStudent(g);
        // etc.
    }
    
  2. addStudent不是ArrayList;的成员函数 它是 的成员函数Library。因此,您不应该编码s.addStudent(f);等。

  3. 你没有初始化s,所以当你的代码第一次尝试添加一个元素时,你会得到一个NullPointerException. 您应该内联初始化它:

    private  ArrayList<Student> s = new ArrayList<Student>();
    

    或为那里编写一个构造函数Library并初始化该字段。

  4. 您最新的更改(添加private ArrayList<Student> s;Student课程中)是在错误的轨道上。您最终会为您创建的每个学生创建一个单独的学生列表;肯定不是你想要的!学生名单属于Library它所在的位置。

  5. 你的构造函数Student看起来像它的分配向后。
于 2013-09-25T01:40:13.363 回答
2

您正在尝试从静态方法直接添加到实例 ArrayList,这是您不能做的事情,更重要的是,您不应该做的事情。您需要先在 main 方法中创建一个 Library 实例,然后才能对其调用方法。

Library myLibrary = new Library();
myLibrary.add(new Student("John Elway", "je223", "j@gmail.com"));
// ... etc...
于 2013-09-25T01:31:49.497 回答
1
public class Library {

private  ArrayList<Student> s = new ArrayList<Student>(); //you forgot to create ArrayList

public void addStudent(Student a)
{
    s.add(a);
}


public static void main(String[] args)
{
    Student g = new Student("John Elway", "je223", "j@gmail.com");
    Student f = new Student("Emily Harris", "emmy65", "e@yahoo.com");
    Student t = new Student("Sam Knight", "joookok", "fgdfgd@yahoo.com");
    Library  library = new Library ();
    library.addStudent(g);
    library.addStudent(f);
    library.addStudent(t);
}

并像这样更改您的构造函数

public Student( String n, String i, String e)
{
        this.name = n;
        this.id = i; 
        this.email = e;
}
于 2013-09-25T01:34:33.597 回答