我的Java代码应该在for循环中创建多个对象,然后将每个对象添加到一个数组中。但是,一旦循环结束,代码就会将相同的(在for循环中最后一个)对象复制到数组中的每个索引 i 中。
如何更正这个以使每个单独的对象在数组中的正确索引中?
如果有必要,我可以发布代码,但如果有人能给我一个如何工作的例子会很好。
for (int i = 0; i < file.listFiles().length; i++) {
if (fileList[i].isFile() && !fileList[i].isHidden() && fileList[i].getName().substring(fileList[i].getName().length() - 4).equalsIgnoreCase(".mp3")
&& !fileList[i].equals(null)) {
try {
songs.add(new Song(fileList[i]));
//System.out.println(songs[i].getTitle());
//playlistInfo[i] = fileList[i].getName();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TagException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这是我将一些对象信息打印到控制台的位置。
System.out.println(getSong(1).getTitle());
System.out.println(getSong(4).getTitle());
答案 0 :(得分:0)
应该像
一样简单for (int ii = 0; ii < yourArray.length; ii++) {
yourArray[ii] = new YourObject();
}
如果没有看到您的代码,我们无法告诉您问题所在。
答案 1 :(得分:0)
您的代码
int i=1; i<file.listFiles().length-1
应该是
int i=0; i<file.listFiles().length
您从数组中的第二个元素开始(因为第一个元素为零)并且提前结束一个因为'&lt;'并且'-1'每个让你停止一个短的.length,总共2个短(并且因为数组基于零,你只想停一个短)。
答案 2 :(得分:0)
如果if条件的评估结果为true,则歌曲阵列中将包含空白项目。我建议使用ArrayList
类,并在找到它们时将项目添加到那里:
List<Song> songs = new ArrayList<Song>();
for (int i=1; i<file.listFiles().length-1; i++) {
if (fileList[i].isFile() && !fileList[i].isHidden() && fileList[i].getName().substring(fileList[i].getName().length()-4).equalsIgnoreCase(".mp3")) {
songs.add(new Song(fileList[i]));
}
}
我还建议你:
关于你的问题,我不确定所有生成的对象是如何相同的,除非你的fileList
数组在所有位置都包含相同的元素。
答案 3 :(得分:0)
用于创建Song
个对象并将其分配给songs
的代码基本上是正确的。你的问题在别处:
for
语句几乎肯定是不正确的,数组的第一个元素的索引是0
,最后一个元素的索引是array.length - 1
。您正在从1
迭代到array.length - 2
。
如果在循环中遇到NullPointerException,很可能是因为fileList
为null
或者它包含null
元素。
如果fileList
数组包含目录,隐藏文件或不匹配的文件,则songs
数组将在相应位置具有null
。这可能是NullPointerExceptions的原因...如果你在打印数组条目之前没有检查。
我注意到这段代码:
System.out.println(getSong(1).getTitle());
System.out.println(getSong(4).getTitle());
不会告诉您Song对象是相同还是不同。相反,它只会告诉您两个Song对象是否具有相同字符的标题。
这将告诉您Song对象是否不同:
if (getSong(1) != getSong(4)) {
System.err.println("They are different");
}
答案 4 :(得分:0)
我已经纠正了这个问题。我的一些类变量是静态的,这导致在我的arraylist中的每个索引中创建新对象的问题。对于造成任何人的任何麻烦,我深表歉意。
感谢大家的帮助! :