我创建了一个名为energy_vs_volume.dat" using 1:(P($1)) > file.txt
的自定义类,其中包含3个Song
变量,String
个变量和int
个ArrayList
项。
现在我为所有变量提供了正确的getter和setter,但是问题在于,当我为String
变量赋值并稍后尝试访问它时,它会抛出{{1错误,因为它的大小是0.以下是有问题的代码。
我是否可能无法正确分配变量,或者可能清除其内存位置?
重要提示:我可以访问并打印其他变量的值,但ArrayList
变量是唯一失败的变量。
IndexOutOfBounds
ArrayList
@Parcel
public class SongClass {
//Other variables defined here
ArrayList <String> verses;
public Song() { /*Required empty bean constructor*/ }
public Song(String var1, String var2, String var3, int var4, ArrayList<String> verses)
{
this.var1= var1;
this.var2= var2;
this.var3= var3;
this.var4= var4;
this.verses = verses;
}
//Getters and Setters below
答案 0 :(得分:2)
您的评论是正确的。由于您传递给歌曲的ArrayList
和您调用ArrayList
的{{1}}是相同的对象,因此它们都会被清除。
如果您需要清除clear()
将新ArrayList
传递到复制ArrayList
内容的Song
构造函数中。
verses
另外,请注意java中的数组和列表从索引0开始,因此您也应该修复for循环。
songs.add(new Song(String var1, String var2, String var3, int var4, new ArrayList(verses));
答案 1 :(得分:1)
问题是你在ArrayList引用中调用了clear。 当你调用songs.add并将经文传递给它并清除它时,你正在清理参考文献。
你必须实例化你传递给songs.add的数组,如下所示:
ArrayList<String> auxVerses = new ArrayList<>(verses);
songs.add(new Song(String var1, String var2, String var3, int var4, auxVerses);
答案 2 :(得分:1)
因为语句
时声明的verses
ArrayList为空
private ArrayList<String> verses = new ArrayList<>(10);
通过new ArrayList<>(10);
,您不是要创建一个包含10个元素的新ArrayList,而不是仅仅定义初始容量。因此verses
为空,verses.size()
为0。
即使你不打电话给verses.clear();
,它仍然是空的。
另一个明确的例子
List<String> list = new ArrayList<String>(10);
System.out.println(list.size());// print '0'
list.add("A");
System.out.println(list.size());// print '1'
list.clear();
System.out.println(list.size());// print '0'
答案 3 :(得分:0)
verses.clear();
由于这行代码,您将获得数组列表大小为0.
答案 4 :(得分:0)
请记住,调用private ArrayList<String> verses = new ArrayList<>(10);
不会创建一个包含10个新&#34;空&#34;的ArrayList。项目。它只是设置List的最大容量。因此,如果您尝试访问任何项目,您将无法获得任何类型的空值或空值,因为您实际上未向列表添加任何内容。你确保它已经为10件物品留出了记忆。因此,在此列表中调用ArrayList.size()
将正确地报告零项。