我有问题我想用包含不同信息的对象填充数组。
这是我的循环
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/