我有问题我想用包含不同信息的对象填充数组。
这是我的循环

public FileRecord [] calcPos() throws IOException{
        for (int i = 0; i < getEFSFATmaxRecords(); i++){
        int blockNumber = i/5;
        int recordOffset = i%5;
        pos = (recordOffset*100+(getFsatPos() + 512 + 512*blockNumber));
        FileRecord rec = new FileRecord(pos,getHeader());
        array = new FileRecord[header.getMaxFileRecords()];

        array[i] = rec;
        System.out.println("FileName: " + array[i].getFileName());


            }
        return array;
    }


它应该使FileRecord的对象不同。位置取决于运行变量i。 Ť
然后循环将所有内容存储在数组中并返回数组。香港专业教育学院宣布数组作为此变量的全局变量,所以我认为循环内的更改将直接影响全局数组。但它不起作用。我做错了什么?

最佳答案

您将在每次迭代中重新初始化数组。下面是您想要的代码的正确版本:

public FileRecord [] calcPos() throws IOException{
     FileRecord[] array = new FileRecord[header.getMaxFileRecords()];
     for (int i = 0; i < getEFSFATmaxRecords(); i++){
       int blockNumber = i/5;
       int recordOffset = i%5;
       pos = (recordOffset*100+(getFsatPos() + 512 + 512*blockNumber));
       FileRecord rec = new FileRecord(pos,getHeader());
       array[i] = rec;
       System.out.println("FileName: " + array[i].getFileName());
    }
    return array;
}


正如vogel所说,如果header.getMaxFileRecords()在循环内更改,则您的数组可能会超出范围。

解决方案:ArrayList应该可以工作。

关于java - 循环获取信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19209423/

10-14 12:07
查看更多