我有一个包含值行的.data文件。我使用split
方法将它们分成单独的值,然后初始化ArrayList
,我将模型项添加到列表中。这个特定代码我有一个while循环,看起来像这样:
while (inFile.hasNextLine() {
// Do something
}
这似乎不起作用所以我将其切换为for
循环。
public MachineLearningInstance(File f) {
try {
int noOfRowsInData = 0;
LineNumberReader lnr = new LineNumberReader(new FileReader(f));
try {
lnr.skip(Long.MAX_VALUE);
noOfRowsInData = lnr.getLineNumber();
//System.out.println(noOfRowsInData);
lnr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
irisData = new ArrayList<Iris>();
// While there is another line in inFile.
Scanner inFile = new Scanner(f);
for (int i = 0; i < noOfRowsInData; i++) {
if (inFile.hasNextLine()) {
// Store line into String
String line = inFile.nextLine();
// Partition values into separate elements in array
String[] numbers = line.split(comma);
// Grab values from that line and store it into a Iris ArrayList Item
irisData.add(i, new Iris(i, numbers[0], numbers[1], numbers[2], numbers[3], numbers[4]));
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
出于一些奇怪的原因(我敢打赌,这是一个我无法看到它的原因)我在运行这段代码时不断获得ArrayListIndexOutOfBoundsException 1
。我猜我的while循环保持循环?我不明白这个问题到底是什么。
我的LineNumberReader
是否可能无法正确读取行数?我认为不是这样的。我很可能没有正确地宣布一些事情。
答案 0 :(得分:0)
所以这恰好解决了我的问题,我真的很累,现在没有兴趣找出原因,但它解决了问题lol:
for (int i = 0; i < noOfRowsInData - 1; i++) {
if (inFile.hasNextLine()) {
// Store line into String
String line = inFile.nextLine();
// Partition values into separate elements in array
String[] numbers = line.split(comma);
// Grab values from that line and store it into a Iris ArrayList Item
irisData.add(i, new Iris(i, numbers[0], numbers[1], numbers[2], numbers[3], numbers[4]));
}
}
据说noOfRowsInData - 1
修复了它。