我试图从文本文件中读出我的文本注释,但由于 NoSuchElementException,它似乎无法迭代到下一行代码。我该如何解决这个问题?
我提前道歉,由于我缺乏写作礼仪,因为我是这个网站的新手。但尽管如此,这是我的代码:
public class Praktikum11_4 {
private Scanner input;
public void membukaFile()
{
try {
input = new Scanner(new File("favouriteplace.txt"));
} catch(FileNotFoundException e)
{
System.err.print("File yang anda cari" +
"Tidak ditemukkan");
System.exit(1);
} catch(IllegalStateException e)
{
System.err.print("Error membaca File");
}
}
public void membacaData()
{
try{
while(input.hasNext())
{
for (int i = 1 ; i <= 7 ; i++ )
{
// Scan the line
String location = input.nextLine();
double rating = input.nextDouble();
System.out.printf(i+". " + "%s dengan rating %f\n", location, rating);
}
}
}catch (NoSuchElementException e)
{
System.err.println("Element not found ERROR 101 ");
}
}
public void menutupFile()
{
if (input != null)
{
input.close();
System.out.print("File berhasil untuk ditutup");
}
}
public static void main(String[] args)
{
}
}
这是我尝试迭代并打印到输出控制台的文件:
这是我得到的输出:
找不到元素 ERROR 101 File berhasil untuk ditutup
因此,这就是我期望的输出:
出现 NoSuchElementException 是因为您在 for 循环内调用 input.nextDouble() ,而没有检查输入文件中是否有下一个可用的 double 值。在尝试读取之前,您应该检查是否存在下一个双精度值。另外,无论是否发生异常,都应该正确处理异常并关闭文件。
public void readData() {
try {
int i = 1;
while (input.hasNext()) {
String location = input.nextLine();
if (input.hasNextDouble()) {
double rating = input.nextDouble();
input.nextLine(); // Consume the newline character after the double
System.out.printf("%d. %s with rating %.2f\n", i, location, rating);
i++;
} else {
System.err.println("Invalid rating format for location: " + location);
input.nextLine(); // Consume the entire line to move to the next line
}
}
} catch (NoSuchElementException e) {
System.err.println("Element not found ERROR 101");
}
}
确保在调用 readData() 之前调用 openFile() 打开文件,并在完成后调用 closeFile() 关闭文件。另外,不要忘记添加 main 方法来执行程序。