2016-12-12 5 views
0

オブジェクトクラスの人の配列に関する問題について教えてもらえますか?私はプログラムを実行するたびに、私はNULLポインタの問題を抱えています。ここにコードがあります。Arrayオブジェクトの生徒を作成してArrayListに追加

List<Student> listPerson = new ArrayList<>(); 
Student[] stud = null; 
int counter = 0; 

ResultSet rs = DBMSConnection.GetDetails(); 

while(rs.next()){ 

    stud[counter] = new Student(); 
    stud[counter].setFirst_name(rs.getString("first_name")); 
    stud[counter].setLast_name(rs.getString("last_name")); 
    stud[counter].setAddress(rs.getString("address")); 
    counter++;  
} 

for(int i = 0 ; i < counter ; i++){ 
    listPerson.add(stud[i]); 
} 

これは、あなたが、私は本当にこの男のようなものです何をしたいです他の回答に

を追加編集です。

Student stud = new Student(); 
stud.firstname = "john"; 
stud.lastname = "doe"; 


Student stud2 = new Student(); 
stud2.firstname = "Mike"; 
stud2.lastname = "doe"; 

List<Student> list = new ArrayList<>(); 
list.add(stud); 
list.add(stud2); 

注:ループ内にスタッドスタンプを作成する方法はありますか。例えば。

int record = 100; 
Student[] sa = null; 

for(int i = 0; i<record; i++){ 
    sa[i] = new Student[]; //instantiate Objects on the fly 
    list.add(sa[i]); 
} 

私はスタッド最初のレコードstud2の値を有する第2のレコードを持っているように、第1のオブジェクトのインスタンスにすべての最初のレコードを割り当て、リストにそれを渡します。

+0

、どのようなIここでやろうとしているのは、私はデータベースにアクセスし、すべての生徒のレコードを順番にループし、結果セットを使用してプログラムに渡していることです。私の考えでは、クラスstudentのオブジェクトの動的配列を作成し、データベースから詳細を取得します。ここにいくつかのガイドが必要です。ありがとう – kornben

+0

あなたの配列のサイズは何ですか? "student [] stud = null"?それはnullから変更されないので、サイズは0です...あなたは新しい要素を配列に追加しています。あなたは本当にその配列を必要としません。ちょうどこれは: "while(rs.next()){listPerson.add(新しい学生(rs.getString(" first_name ")、rs.getString(" last_name ")、rs.getString(" address "));"注意:すべての学生の詳細を持つ空でないコンストラクタを作成する必要があります。 – Shondeslitch

+0

私はちょうど大きな値の配列を保持するために動的配列を作成したい配列のサイズを追跡したくないので、Studentクラスのオブジェクト配列は動的でなければなりません。技術的には、Studentオブジェクトのサイズはレコードのサイズと一致する必要があります。 – kornben

答えて

1

それはヌルから変わることはありませんが、実際にあなたが

あなたは後でこのArrayListのを反復処理することができます

ResultSet rs = DBMSConnection.GetDetails(); 

    while(rs.next()){ 

     Student stud = new Student(); 
     stud.setFirst_name(rs.getString("first_name")); 
     stud.setLast_name(rs.getString("last_name")); 
     stud.setAddress(rs.getString("address")); 
     listPerson.add(stud); 
    } 

編集

考えるの配列を必要としないとしてあなたの配列がStudent[] stud = null; nullの場合

for (Student student: listPerson) { 
    System.out.println (student.getFirst()); 
}  
+0

Icですが、問題は私のデータベースに複数の値があり、生徒の配列を作成して生徒オブジェクトに追加したいのです。それは働くでしょうか?スタッド、スタッド1、スタッド2を動的に作成するようにしています – kornben

+0

私はすべての値を取得し、それを私のJTableに渡したいと思います。私はrs2xmlライブラリを使用していません。データを手動で入力します。アドバイスありがとう – kornben

+0

はい、DBから取り出すレコードごとに、新しいStudentをArrayListに追加しています。 –

0

配列は、同じタイプの複数の変数を格納するJavaのオブジェクトです。配列 はプリミティブまたはオブジェクト参照のいずれかを保持できますが、配列がプリミティブ要素を保持すると宣言されていても、配列自体は常にヒープ上のオブジェクトになります。

配列の作成とは、ヒープ上に配列オブジェクトを作成すること(つまり、すべてのオブジェクトが存在することです)を意味します。つまり、配列の型を新しいものにすることです。配列オブジェクトを作成するには、Javaがヒープに割り当てるスペースの量を知る必要があるため、作成時に配列のサイズを指定する必要があります。配列のサイズは、配列が保持する要素の数です。

データを動的に管理したい場合は、java.util(HashMap、ArrayList、TreeSetなど)のコレクションタイプの1つを使用できます。ところで、あなたの場合は

List<Student> listPerson = new ArrayList<>(); 
ResultSet rs = DBMSConnection.GetDetails(); 

while(rs.next()){ 

    Student stud = new Student(); 
    stud.setFirst_name(rs.getString("first_name")); 
    stud.setLast_name(rs.getString("last_name")); 
    stud.setAddress(rs.getString("address")); 
    listPerson.add(stud); 
} 

この仕事をループは、あなたが(listPerson)すべてのデータを取得し、解析のためにあなたのJTableに渡すことができますが後かなど

+0

それは人を動かすでしょうが、最後のレコードしか取得できません。私がしようとしているのは、ハードコードされたJavaコードを使用してデータベースからすべての値を取得することです。私は現在、rs2xmlのようないくつかのライブラリを使いたくはありません。なぜなら、わたしの国でJavaのためのいくつかのGov't試験を受ける予定だからです。私はあなたのコメントを感謝しますが、私はまだ解決策を見つけることができませんでした。 – kornben

+0

本当に必要なのは、オブジェクトStudentを動的にインスタンス化したいということです。とにかく私は人間のクラスを動的にインスタンス化することができますか?スタッド[0]、スタッド[1]、スタッド[2]を関数内に配置し、各値をそれに割り当て、それをlistPersonに渡します。 – kornben

+0

@ kornbenこれはまさに私の答えがやっていることです。私はあなたにいくつかの基本的な誤解があり、あなたの質問は何が間違っているのか明確には言いません。より多くの情報やコードであなたの質問を更新してください –

関連する問題