我正在尝试使用此代码:
首先阅读文本文件" occupancy&#34 ;,将初始化为 10个零。
将其分配给数组(guestsIn [])。
从键盘输入获取新数据,并使用新值更新数组(guestsIn [])(有时会覆盖所有值,有时不会覆盖)
覆盖文件上的新数组"占用"以10个int值的形式。
这是我运行此代码时收到的错误消息:
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at occupancyProg.main(occupancyProg.java:18)
最终,我正在尝试使用单个文本文件(仅包含10个int值)进行扫描和打印。 但我不知道错误信息告诉我什么,我不知道我的逻辑在哪里有缺陷。
据我理解
PrintStream diskWriter = new PrintStream(new File("occupancy"));
应该创建一个文件"占用"因为在语句中使用了 new ,所以我修改了代码以便在覆盖过程中修复可能出现的问题(通过删除现有文件并将其替换为新文件),但是出现相同的错误消息。 非常感谢帮助。
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
public class occupancyProg {
public static void main(String[] args)
throws FileNotFoundException {
Scanner diskScanner = new Scanner(new File("occupancy"));
Scanner keyboard = new Scanner(System.in);
PrintStream diskWriter = new PrintStream(new File("occupancy"));
int guestsIn[] = new int[10];
int whichRoom, numGuests;
for (int roomNum= 0; roomNum<10; roomNum++) {
guestsIn[roomNum] = diskScanner.nextInt();
}
do {
System.out.print("Room Number: ");
whichRoom = keyboard.nextInt();
System.out.print("Number of Guests: ");
numGuests = keyboard.nextInt();
guestsIn[whichRoom]=numGuests;
System.out.print("Do another? Y/N");
} while(keyboard.findWithinHorizon(".", 0).charAt(0) == 'Y');
new File("occupancy").delete();
for (int roomNum= 0; roomNum<10; roomNum++) {
diskWriter.print("guestsIn[whichRoom] ");
}
keyboard.close();
diskScanner.close();
}
}
答案 0 :(得分:1)
您似乎正在尝试同时打开文件进行读写。即使您在完成从diskScanner读取之后也没有写入diskWriter,只需构建diskWriter就会打开文件进行写入并截断文件。订单应该是:
不需要删除,因为打开相同的文件进行写入将替换它。
public static void main(String[] args) throws FileNotFoundException {
Scanner diskScanner = new Scanner(new File("occupancy"));
Scanner keyboard = new Scanner(System.in);
int guestsIn[] = new int[10];
int whichRoom, numGuests;
for (int roomNum= 0; roomNum<10; roomNum++) {
guestsIn[roomNum] = diskScanner.nextInt();
}
do {
System.out.print("Room Number: ");
whichRoom = keyboard.nextInt();
System.out.print("Number of Guests: ");
numGuests = keyboard.nextInt();
guestsIn[whichRoom]=numGuests;
System.out.print("Do another? Y/N");
} while(keyboard.findWithinHorizon(".", 0).charAt(0) == 'Y');
keyboard.close();
diskScanner.close();
PrintStream diskWriter = new PrintStream(new File("occupancy"));
for (int roomNum= 0; roomNum<10; roomNum++) {
diskWriter.print(guestsIn[roomNum]);
diskWriter.print(' ');
}
diskWriter.close();
}