我有一个while循环,它从文件中提取信息并创建新的对象,然后将这些对象放入一个数组中,由于某种原因,while循环为每个if语句迭代一次,然后退出,因此所有其他行都被设为null。下面是我的while循环
// open file and create array
File file = new File("Adventures.txt");
Scanner myReader = new Scanner(file);
Adventure[] array = new Adventure[myReader.nextInt()];
int i = 0;
// reading file
while (myReader.hasNext()) {
if ("Zipline".equals(myReader.next())) {
array[i] = new Zipline(myReader.nextDouble(), myReader.nextDouble());
i++;
}
if ("Snorkel".equals(myReader.next())) {
array[i] = new Snorkel(myReader.nextDouble(), myReader.nextDouble());
i++;
}
if ("Helicopter".equals(myReader.next())) {
array[i] = new Helicopter(myReader.nextDouble(), myReader.nextDouble());
i++;
}
} // while loop
```发布于 2021-02-05 15:48:58
循环的每次迭代使用了太多的值,因为每次对myReader.next()的调用都会使用另一个令牌。将令牌存储在一个变量中,以便您可以多次检查它。
while (myReader.hasNext()) {
String token = myReader.next();
if ("Zipline".equals(token)) {
array[i++] = new Zipline(myReader.nextDouble(), myReader.nextDouble());
}
if ("Snorkel".equals(token)) {
array[i++] = new Snorkel(myReader.nextDouble(), myReader.nextDouble());
}
if ("Helicopter".equals(token)) {
array[i++] = new Helicopter(myReader.nextDouble(), myReader.nextDouble());
}
} // while loop或者使用switch语句:
while (myReader.hasNext()) {
switch (myReader.next()) {
case "Zipline":
array[i++] = new Zipline(myReader.nextDouble(), myReader.nextDouble());
break;
case "Snorkel":
array[i++] = new Snorkel(myReader.nextDouble(), myReader.nextDouble());
break;
case "Helicopter":
array[i++] = new Helicopter(myReader.nextDouble(), myReader.nextDouble());
break;
}
} // while loop发布于 2021-02-05 16:02:38
我建议你实现BuffeRedreader,它可能看起来像这样:
objReader = new BufferedReader(new FileReader("D:\Adventures.txt"));扫描仪和BuffeRedreader的不同之处在于,缓冲区读取速度更快,给出的结果也更准确。就我个人而言,我改成了buffer,因为来自Scanner的错误不适用于Buffer。我希望我能帮上忙
https://stackoverflow.com/questions/66059348
复制相似问题