Java 在for循环中创建多个对象

Java 在for循环中创建多个对象,java,object,loops,Java,Object,Loops,我用Java编写的代码应该在for循环中生成多个对象,然后将每个对象添加到一个数组中。但是,一旦循环结束,代码只会将相同的(for循环中的最后一个)对象复制到数组中的每个索引i中 如何更正此问题,使每个单独的对象在数组中的正确索引中 如果有必要,我可以发布代码,但如果有人能给我一个如何工作的例子,那就太好了 for (int i = 0; i < file.listFiles().length; i++) { if (fileList[i].isFile() &&

我用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();
        }
    }
}
应该简单到

for (int ii = 0; ii < yourArray.length; ii++) {
    yourArray[ii] = new YourObject();
}
for(int ii=0;ii
如果不查看您的代码,我们无法告诉您问题所在。

您的代码

int i=1; i<file.listFiles().length-1

inti=1;i如果您的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]));
    }
}
List songs=new ArrayList();

对于(int i=1;i您用来创建
歌曲
对象并分配给
歌曲
的代码基本上是正确的。您的问题在别处:

  • for
    语句几乎肯定是不正确的,数组第一个元素的索引是
    0
    ,最后一个元素的索引是
    array.length-1
    。您正在从
    1
    迭代到
    array.length-2

  • 如果在循环中得到NullPointerException,很可能是因为
    fileList
    null
    或者它包含
    null
    元素

  • 如果
    文件列表
    数组包含目录、隐藏文件或不匹配的文件,则
    歌曲
    数组的相应位置将有一个
    null
    。如果在打印数组项之前未进行检查,这可能是导致NullPointerException的原因

我注意到这段代码:

System.out.println(getSong(1).getTitle());
System.out.println(getSong(4).getTitle());
不会告诉您歌曲对象相同或不同。相反,它只会告诉您两个歌曲对象的标题是否具有相同的字符

这将告诉您歌曲对象是否不同:

if (getSong(1) != getSong(4)) {
    System.err.println("They are different");
}

我已经纠正了这个问题。我的一些类变量是静态的,这导致了在arraylist的每个索引中创建新对象的问题。对于由此造成的任何问题,我深表歉意


谢谢大家的帮助!:]

发布你现有的代码会很有帮助。请发布你的代码,这会有很大帮助。发布你的示例,我们会看看你能将代码发布到你列出歌曲的地方吗?可能问题在于打印时,而不是插入时。我们需要查看什么是getSong(int)是的,可能还有getTitle()实现的相关部分。是的,这是以前的情况,但由于某种原因,我在数组的第0个索引上得到了NullPointerException,这本身就是另一个问题!:填充一些内容以检查文件列表[I]不是null。你应该从零开始。@Rodney:你现在运行循环的方式几乎肯定是错误的。我认为Ravi的建议是一个好的建议。如果你仍然得到null指针异常,请告诉我们你的代码中哪一行抛出了它。我会将代码更新为我更改的代码。null元素的过滤器现在是th谢谢!另外,当//playlyinfo[i]=fileList[i].getName();行未注释时,我会得到一个ArrayIndexOutOfBounds异常。@Rodney:i的哪个值给出了一个ArrayIndexOutOfBoundsException?你能检查fileList[]在调试器中查看是否为数组的每个元素分配了一个值,以及数组的大小是否符合预期?感谢所有的建议。我肯定会以更合适的方式处理异常;但是,我还没有完成该步骤。我已经切换到ArrayList,但我仍然得到相同的对象索引。再次感谢!也许你应该在循环之外寻找你的问题。你可能需要调试它或在任何地方添加打印语句。我会确保同一个文件不会填满你的整个文件列表数组,并且Song类的构造函数实际上使用了你发送给它的文件。另外,检查方法是否d您正在使用以检查每个文件是否不同,其他文件是否正常工作。我添加了另一个筛选器,其中null元素不会添加到列表中,并且该部分现在可以工作。此外,我更改了for循环的限制。谢谢!感谢代码段!结果是“它们不同”正如我所说的,有时候你应该从外观之外寻找一个给定问题的解决方案:-)。
System.out.println(getSong(1).getTitle());
System.out.println(getSong(4).getTitle());
if (getSong(1) != getSong(4)) {
    System.err.println("They are different");
}