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);
    }

    }

私の学生オブジェクトが学生の配列リストに追加されるようですが、そのようには機能していません。配列リストが 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. mainstaticメソッドです。つまり、 のインスタンスのコンテキスト外で実行されますLibrary。ただし、sのインスタンス フィールドですLibrary。フィールドを作成するか、インスタンスを作成しsてそのインスタンスを介してフィールドを参照する必要があります。staticLibrary

    public static void main(String[] args) {
        Library lib = new Library();
        . . .
        lib.addStudent(g);
        // etc.
    }
    
  2. addStudentのメンバー関数ではありませんArrayList。のメンバー関数ですLibrarys.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 に直接追加しようとしていますが、それはできないことであり、さらに重要なことに、すべきでないことです。メソッドを呼び出す前に、まずメイン メソッド内に L​​ibrary インスタンスを作成する必要があります。

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 に答える