2016-11-14 7 views
0

ArrayListに異なるオブジェクトを表示しようとしています。私のプロジェクトの文脈では、1人の学生が1つのオブジェクトです。get(index)を使用してオブジェクト配列を表示できません

私は、ArrayListを使ってすべての生徒オブジェクトを保存しましたが、ArrayListの読み込みに問題があります。私はそれが別の学生を表示するために取得するにはどうすればよい

;

<% 
    String student_name = request.getParameter("studentName"); 
    ArrayList<Object[]> studentList = new ArrayList<Object[]>(); 
    if(student_name != null && student_name.length() > 0) { 
    PreparedStatement preparedStatement = con.prepareStatement("Select * from  users where firstname LIKE ? "); 
    preparedStatement.setString(1, "%" +student_name+ "%"); 
    ResultSet resultSet = preparedStatement.executeQuery(); 

    while (resultSet.next()) { 
     String first_name = resultSet.getString("firstname"); 
     String last_name = resultSet.getString("lastname"); 
     String email = resultSet.getString("email"); 

     Object[] student = {first_name,last_name,email}; 
     studentList.add(student); 
     session.setAttribute("studentObject",studentList); 


     //System.out.println("First Name: " + first_name + "," + "Last Name: " + last_name); 
     System.out.println(studentList.get(0)); 


    } 

私は(studentList.get(0))を表示しようとすると、私が見るすべては "@XXXX [Ljava.lang.String" でありますオブジェクトはインデックスに基づいていますか?

+1

あなたが学生のオブジェクトを得ました。出力は、それがアドレスXXXXXでの文字列の配列であることを示しています。取得するにはエル生徒オブジェクトの内容(例: first_name)、適切なインデックスにアクセスする必要があります: 'System.out.println(studentList.get(0)[0]);' – Quagaar

+0

あなたは何をしようとしていますか? 'Object'の' toString'メソッドの結果を取得しているだけです。これはあなたが見るものです。あなたは何をしたい? – Taylor

+0

JSPページ内でこれをやっていますか? – ppopoff

答えて

0

java.util.Arraysクラスを試してみてください:

System.out.println(Arrays.toString(studentList.get(0))); 
0

現在、あなたは正確に人間が読めるされていないオブジェクト[]をプリントアウトしています。私はStudentという新しいクラスを作成することをお勧めします。その後、firstName、lastName、emailの3つのメンバ変数を持ちます。また、この新しいクラスのtoString()メソッドを作成します。次に、学生のArrayListを持つことができます。これはあなたのためにすべてを簡素化するはずです。

0

Stringを期待通りに表示しようとしていないようですが、arrayObjectsと表示しようとしています。

お試しください。System.out.println(studentList.get(0)[0]);

あなたはアイデアを持っているでしょう

0

あなたは、少なくとも2つのオプションがあります。

  1. Object[]学生に対応するオブジェクトを実装:あなたがオブジェクトのtoString()を無効にすることができる。このクラスで
    を、そしてそれを実装しますデータを提示することを望む。 注:studentList.get(0)を印刷すると、オブジェクトへの参照を返す呼び出しオブジェクトのデフォルトのtoString()が実際に印刷されるため、これはあなたに非常に関連します。

    デフォルトについての詳細はObject.toString()hereです。

  2. simplestwayはArrays.toString()を使用することである。
    するSystem.out.println(Arrays.toString(studentList.get(0)))。

1

最初は、Javaで独自のクラスStudentを定義するのはもっと慣用的です。そのクラスにエクストラクタを書き込んで、toStringメソッドを定義すれば、それは素晴らしいことでしょう。

Javaでは、印刷する任意のタイプのオブジェクトに対してtoStringメソッドを定義する必要があります。したがって、あなたのStudentクラスのためにtoStringを定義しなければなりません。

しかし、あなたは配列を使用しています。 Javaには配列用に定義されたtoStringメソッドがありません。だから私はあなたにこのようなことをするよう提案します。

// At first it could be better to define a structure 
// that represents a student 
// class must be defined in separate file like Student.java 
// Student.java 
public class Student { 
    // constructor for the Student object 
    public Student(final String firstName, 
        final String lastName, 
        final String email) { 

     this.firstName = firstName; 
     this.lastName = lastName; 
     this.email  = email; 
    } 

    private String firstName; 
    private String lastName; 
    private String email; 

    @override String toString() { 
     return firstName + " " + lastName + " " + email; 
    } 

    // getters 
    public String getFirstName() { return firstName; } 
    public String getLastName() { return lastName; } 
    public String getEmail() { return email; } 

    // setters 
    public void setFirstName(final String firstName) { 
     this.firstName = firstName; 
    } 

    public void setLastName(final String lastName) { 
     this.lastName = lastName; 
    } 

    public void setEmail(final String email) { 
     this.email = email; 
    } 
} // end of Student.java file 
/////////////////////////////////////////// 

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

.... // your code 

ResultSet resultSet = preparedStatement.executeQuery(); 

while (resultSet.next()) { 
    // creating a new student with new keyword 
    final Student currentStudent = new Student(
     resultSet.getString("firstname"), 
     resultSet.getString("lastname"), 
     resultSet.getString("email") 
    ) 

    // you are adding a student object to the list 
    studentList.add(currentStudent); 
    session.setAttribute("studentObject",studentList); 

    // that should work 
    // toString method will be called implicitly 
    System.out.println(studentList.get(0)); 
} 

// So you will have a list of students 
// that will be accessable in the following manner: 

studentList.get(0).getFirstName; 
studentList.get(1).setFirstName("New name"); 

あなたは異なる動作をしたい場合は、直接これらのフィールドを呼び出す、またはJavaも想定していtoString方法

の 動作を変更することがあります。コードはいくつかのミスが含まれていてもよいので、(私は急いで少しですあなたはキャメルケースの表記法を使用していることを、あなたはstyle guide中で見つけることがあります。

はそれがお役に立てば幸いです。

関連する問題