Java 构造函数和方法中数组的内容不同
我有自己的类Java 构造函数和方法中数组的内容不同,java,list,constructor,arraylist,Java,List,Constructor,Arraylist,我有自己的类事件,它几乎没有变量,比如主题和开始和结束时间。然后我有一个Day类,它有这些事件。然而,当我初始化Day时,它在构造函数中得到正确的Event列表,然后我将该列表存储在本地列表中,然后尝试用其他方法返回它,但它为同一列表提供了不同的内容 以下是澄清问题的代码: import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; public class Day {
事件
,它几乎没有变量,比如主题和开始和结束时间。然后我有一个Day
类,它有这些事件。然而,当我初始化Day
时,它在构造函数中得到正确的Event
列表,然后我将该列表存储在本地列表中,然后尝试用其他方法返回它,但它为同一列表提供了不同的内容
以下是澄清问题的代码:
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
public class Day {
private String date;
private ArrayList<Event> events = new ArrayList<Event>();
private SimpleDateFormat dayDotMonth = new SimpleDateFormat("dd.MM EEEE");
public Day(int date, ArrayList<Event> newEvents){
this.events = newEvents;
System.out.println("FROM Constructor:");
for (Event event : this.events) {
System.out.println(event.getSubject()); // CORRECT LIST
}
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(date*1000L);
this.date = dayDotMonth.format(cal.getTime());
}
public String getDate(){
return this.date;
}
public ArrayList<Event> getEvents(){
System.out.println("FROM getEvents():");
for (Event event : this.events) {
System.out.println(event.getSubject()); // INCORRECT LIST
}
return this.events;
}
public int getAmountOfEvents(){
return this.events.size();
}
}
这是我的电话号码:
private void getObjects(String url) throws JSONException, Exception {
JSONObject jsonObject = new JSONObject(new NetTask().execute(url).get());
JSONArray job1 = jsonObject.getJSONArray("events");
ArrayList<Event> events = new ArrayList<Event>();
Calendar calPrev = Calendar.getInstance();
int prevDate = 0;
boolean first = true;
for (int i = 0; i < job1.length(); i++) {
JSONObject myJsonObject = job1.getJSONObject(i);
int start = myJsonObject.getInt("start");
int end = myJsonObject.getInt("end");
String subject = myJsonObject.getString("subject");
String eventId = myJsonObject.getString("eventid");
String description = myJsonObject.getString("description");
if(first){
prevDate = start;
calPrev.setTimeInMillis(start*1000L);
events.add(new Event(start,end,subject,eventId,description));
first = false;
}else{
Calendar calCur = Calendar.getInstance();
calCur.setTimeInMillis(start*1000L);
if(calPrev.get(Calendar.YEAR) == calCur.get(Calendar.YEAR) && calPrev.get(Calendar.DAY_OF_YEAR) == calCur.get(Calendar.DAY_OF_YEAR)){
events.add(new Event(start,end,subject,eventId,description));
calPrev.setTimeInMillis(start*1000L);
}else{
calPrev.setTimeInMillis(start*1000L);
this.days.add(new Day(prevDate,events));
prevDate = start;
events.clear();
events.add(new Event(start,end,subject,eventId,description));
}
}
}
this.days.add(new Day(prevDate,events));
System.out.println("Last day added to list\nPrinting events from days:");
for (Day day : this.days){
ArrayList<Event> events = day.getEvents();
for(Event event : events){
System.out.println(event.getSubject());
}
}
}
private void getObjects(字符串url)抛出JSONException,异常{
JSONObject JSONObject=newjsonobject(newnettask().execute(url.get());
JSONArray job1=jsonObject.getJSONArray(“事件”);
ArrayList事件=新建ArrayList();
Calendar calPrev=Calendar.getInstance();
int prevDate=0;
布尔值优先=真;
对于(int i=0;i
知道我做错了什么吗?您好,没有问题,我用string arraylist测试了它,它工作正常
但是我们不知道如何填充arraylist并将其传递给类,如果它如下所示,它应该正常工作
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main)
ArrayList arr=new ArrayList();
协议增补(“1”);
协议增补(“2”);
协议增补(“3”);
协议增补(“4”);
协议增补(“5”);
协议增补(“6”);
d天=新的一天(1,arr);
d、 getStrings();
}
包com.talha.examples;
导入java.text.simpleDataFormat;
导入java.util.ArrayList;
导入java.util.Calendar;
公课日{
私有字符串日期;
私有ArrayList字符串=新ArrayList();
私有SimpleDataFormat dayDotMonth=新SimpleDataFormat(“dd.MM EEEE”);
公共日(int日期,ArrayList新闻字符串){
this.Strings=newStrings;
System.out.println(“来自构造函数:”);
for(字符串s:this.Strings){
System.out.println(s);//正确的列表
}
Calendar cal=Calendar.getInstance();
校准设置时间单位为毫秒(日期*1000L);
this.date=dayDotMonth.format(cal.getTime());
}
公共字符串getDate(){
返回此日期;
}
公共ArrayList getStrings(){
System.out.println(“来自getStrings():”;
for(字符串s:this.Strings){
System.out.println(s);//列表不正确
}
返回这个.Strings;
}
public int getAmountOfStrings(){
返回此.Strings.size();
}
}
您没有显示调用构造函数的内容,但您只是将引用复制到集合这一事实意味着,如果以后更改了集合,您将看到这些更改。例如:
ArrayList<Event> events = new ArrayList<Event>();
events.add(new Event(0, 1, "id", "subject", "description"));
Day day = new Day(0, events);
events.clear();
System.out.println(day.getEvents().size()); // 0
为此:
this.events = new ArrayList<Event>(newEvents);
this.events=newarraylist(newEvents);
此外,我建议您将ArrayList
变量和参数更改为List
类型-通常,您更喜欢编程到接口。事件中的开始
和结束
是什么意思也不清楚,您的代码当前使用的是系统的默认时区-是吗?更改此选项。events=newEvents;到this.events=newarraylist(newEvents);工作!谢谢
ArrayList<Event> events = new ArrayList<Event>();
events.add(new Event(0, 1, "id", "subject", "description"));
Day day = new Day(0, events);
events.clear();
System.out.println(day.getEvents().size()); // 0
this.events = newEvents;
this.events = new ArrayList<Event>(newEvents);