数组列表的添加不能在循环外工作



我知道StackOver flow不是一个你可以把你的作业贴上去让别人帮你做的地方但我在我的智慧的尽头,我尝试了简单的调试方法,如打印行,我可以看到的结果,只是一些如何arraylist不保存项目,当我添加

假设数组添加了两个元素

  first item(name1,job1,event1,date1,location1)
  second item(name2,job2,event2,date2,location2)

最终结果

name1 test234
name2 test234
name2 outloop
name2 outloop
下面是代码
public class Homework {
// ...
    private int cin;
    private String[] jobarray;
    private String[] eventarray;
    private Timetable tb;
    private String[] namesarray;
//...
    public ArrayList retrievebyname(String name, String date) {
        ResultSet rs = null;
        DBController db = new DBController();
        ArrayList<Timetable> list = new ArrayList();
        // start of for loop**
        for (int k = 0; k < cin; k++) {
            // step 1 - establish connection to database
            db.getConnection();
            // step 2 - declare the SQL statement
            String dbQuery = "select event.eventName,Timetable.location,Timetable.date "
                    + "From Timetable " + "inner join event "
                    + "on event.eventId=Timetable.eventId " + "inner join VolunteerJob "
                    + "on VolunteerJob.ID= Timetable.jobId " + "Where JobName='"
                    + jobarray[k] + "'" + "and Timetable.date ='" + date + "'"
                    + "and eventName='" + eventarray[k] + "'";
            // step 3 - to retrieve data using readRequest method
            rs = db.readRequest(dbQuery);
            try {
                if (rs.next()) {
                    tb.setName(namesarray[k]);
                    tb.setJobName(jobarray[k]);
                    tb.setEventName(rs.getString("eventName"));
                    tb.setDate(rs.getString("date"));
                    tb.setLocation(rs.getString("location"));
                    // **Adding the item retrieve into ArrayList called List**
                    list.add(k, tb);
                    System.out.println(list.get(k).getName() + " test234");
                }
            } catch (Exception e) {
                e.printStackTrace(); // fail to retrieve, print error message
            }
            // step 4 - close connection
            db.terminate();
        } // end of for loop**
        System.out.println(list.get(0).getName() + " outloop");
        System.out.println(list.get(1).getName() + " outloop");
        return list;
    }
}

编辑之后,我看到您在方法的开始处创建了Timetable的一个实例。这还不够。这意味着你在一次又一次地向列表中添加相同的对象,并且你在每次迭代中都覆盖了它的属性。

您必须为添加到列表中的每个对象创建一个新的Timetable实例。

    tb = new Timetable ();
    tb.setName(namesarray[k]);
    tb.setJobName(jobarray[k]); 
    tb.setEventName(rs.getString("eventName")); 
    tb.setDate(rs.getString("date"));
    tb.setLocation(rs.getString("location"));
    list.add(k, tb)

最新更新