gpt4 book ai didi

java - 将值从一个 Arraylist 复制到另一个 Arraylist 时,所有值都会设置为第一个 Arraylist 中输入的最后一个值

转载 作者:行者123 更新时间:2023-12-01 10:34:14 26 4
gpt4 key购买 nike

我在为自己编写一个小程序时遇到一些问题。我有一个类将从 CSV 中读取数据并将数据放入 Farts 类的数组列表中(在你问之前这是“格斗艺术”的缩写)。这是可行的,当我测试输出时,我可以看到从 csv 读取的值。

 AssetManager assetManager =context.getAssets();
ArrayList<Farts> arrayfarts = new ArrayList<Farts>();
InputStream csvStream = null;
System.out.println("right before try loop");

try {
csvStream = assetManager.open("farts.txt");
InputStreamReader csvStreamReader = new InputStreamReader(csvStream);
CSVReader csvreader = new CSVReader(csvStreamReader);
Farts fdata = new Farts();
String[] line;
int temp=0;
while ((line=csvreader.readNext())!=null){
System.out.println("inside of while");
fdata.fname=line[0];
fdata.description=line[1];
arrayfarts.add(temp,fdata);
System.out.println("Array iteration " + temp + " of " + arrayfarts.size());
System.out.println(arrayfarts.get(temp).fname + " " + arrayfarts.get(temp).description + "\n");
temp++;
}

} catch (IOException e) {
e.printStackTrace();
System.out.println("ioexception"+e.toString());
}
return arrayfarts;
}

回到我的主类,然后我使用 .addall 添加从上面返回的内容。但是,Arraylist 中的数据仅由最后输入的值填充。

arrayFarts.addAll(readcsv.retrieveFarts(this));
System.out.println(arrayFarts.get(0).fname + " " + arrayFarts.get(0).description + "\n");
int temp=0;
while (temp<arrayFarts.size()){
cupboard().withDatabase(db).put(arrayFarts.get(temp));
System.out.println("Array iteration " + temp + " of " + arrayFarts.size());
System.out.println(arrayFarts.get(temp).fname+" "+arrayFarts.get(temp).description+"\n");
temp++;
}

我错过了什么吗?

最佳答案

问题出在以下几行:

fdata.fname=line[0];
fdata.description=line[1];
arrayfarts.add(temp,fdata);

您需要在每个循环中创建一个新的 Farts 实例,而不是更改单个实例。

就目前情况而言,您只需将同一个实例多次添加到列表中,同时更改其值即可。这意味着循环完成后您将只能看到最后解析的值。您还会多次看到它,因为 ArrayList 允许重复。

关于java - 将值从一个 Arraylist 复制到另一个 Arraylist 时,所有值都会设置为第一个 Arraylist 中输入的最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34885145/

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