gpt4 book ai didi

java - ArrayList 添加在循环外不起作用

转载 作者:行者123 更新时间:2023-11-30 08:21:34 25 4
gpt4 key购买 nike

我知道 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)

关于java - ArrayList 添加在循环外不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25095803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com