所以我必须编写一个航班预订系统的程序。如果我正常运行程序并在提示时输入值,则没有任何问题,但是当我使用.txt文件输入时,我得到NullPointerException
。得到NullPointerException
的代码部分是
public void instantiateAirplane() throws IOException{
boolean creatingAirplane = true;
String className= "";
String seatFormat;
int rowNums;
while (creatingAirplane){
input = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter service class name or [ENTER] to finish: ");
className = input.readLine();
if (className.equals("")) {
creatingAirplane = false;
}
else{
System.out.println("Enter seating pattern: ");
seatFormat = input.readLine();
System.out.println("Enter number of rows: ");
rowNums = Integer.parseInt(input.readLine());
plane.creatSeatingChart(className, rowNums, seatFormat);
}
}
}
进行正常输入时,它运行如下:
C:\Users\Owner\Desktop\Math&CIS\CS151\HW1>java UserInterface planes
Enter service class name or [ENTER] to finish:
First Class
Enter seating pattern:
WAAW
Enter number of rows:
2
Enter service class name or [ENTER] to finish:
Business Class
Enter seating pattern:
WAAW
Enter number of rows:
2
Enter service class name or [ENTER] to finish:
Add [P]assenger, Add [G]roup, [C]ancel Reservations, Print [S]eating chart, Prin
t [M]anifest, [Q]uit
但是当使用.txt输入时,会发生以下情况
C:\Users\Owner\Desktop\Math&CIS\CS151\HW1>java UserInterface planes < input.txt
Enter service class name or [ENTER] to finish:
Enter seating pattern:
Enter number of rows:
Enter service class name or [ENTER] to finish:
Exception in thread "main" java.lang.NullPointerException
at UserInterface.instantiateAirplane(UserInterface.java:21)
at UserInterface.main(UserInterface.java:123)
C:\Users\Owner\Desktop\Math&CIS\CS151\HW1>
异常发生在“if (className.equals("")) {
”行
输入文本如下:
First
WAAW
2
Economy
WCAACW
3
...
我不确定使用输入文本时它为什么不起作用。
答案 0 :(得分:1)
当您使用readLine读取文件中的连续行时,如果您读取文件的末尾,则会返回空值。
答案 1 :(得分:1)
readLine
如果已到达流的末尾则返回“null”。
这两个表现不一样,因为(我认为)你从键盘输入“Q”,但你没有在输入文件中加上“Q”。
注意:我不是说你应该在文件中加上“Q”;您应该在代码中检查null
。
答案 2 :(得分:1)
一旦迭代器达到所谓的EOF或文件结尾,readLine()方法就返回null。检查是否ClassName == null || className.Equal("")...
此外,您可能希望在循环中声明input = new BufferedReader(new InputStreamReader(System.in));
,这样您就不会在每次循环迭代时重新初始化读者。
! -
答案 3 :(得分:0)
readLine()
方法在文件末尾返回null。这与你在输入时获得的“”不同。
http://download.oracle.com/javase/6/docs/api/java/io/BufferedReader.html#readLine()
您可以将测试更改为if (className == null || className.equals("")) { ...
答案 4 :(得分:0)
如果您想在遇到空字符串(“”)时停止创建飞机,那么您的文件中将需要一个空行:空行表示两行之间没有任何内容的行分隔符。如果你的意思是读到文件的末尾,你应该在看到null
时停止,正如其他海报所说的那样。