有人可以看看这段代码吗?我收到此错误
Exception in thread "main" java.lang.NullPointerException
at project.Project.IsOccupied(Project.java:80)
at project.Project.ReserveSeat(Project.java:51)
at project.Project.main(Project.java:142)
我不知道我做错了什么。我一直在使用数组来预订座位。我正在尝试预订座位,并检查输入的座位号是否已被占用,或者是否所有座位都已被占用。
package project;
import java.util.*;
import java.io.*;
public class Project {
static String MSR[][] = new String [10][3], Name, SeatNo, Reserved;
static Scanner user = new Scanner(System.in);
static boolean IsEmpty(){
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 3; j++) {
if (MSR[i][1] != null) {
return false;
}
}
}
return true;
}
static boolean IsFull(){
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 3; j++) {
if ((MSR[i][2]) == null) {
return false;
}
}
}
return true;
}
static void ReserveSeat()throws IOException{
PrintWriter save = new PrintWriter("MovieSeats.txt");
if(IsFull()){
System.out.println("All seats are occupied");
}
else {
System.out.print("Enter seat number to reserved: ");
SeatNo = user.next();
if (IsOccupied(SeatNo)) {
int RSeatNo = Integer.parseInt(SeatNo);
MSR[RSeatNo][1]=SeatNo;
save.print(SeatNo);
System.out.print("Enter name: ");
Name=user.next();
MSR[RSeatNo][0]=Name;
save.print(Name);
Reserved="X";
MSR[RSeatNo][2]=Reserved;
save.print(Reserved);
}
else {
System.out.println("Seat is occupied");
}
}
}
static boolean IsOccupied(String Seat) {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 3; j++) {
if (MSR[i][1].equals(Seat)) {
MSR[i][2]="X";
return true;
}
}
}
return false;
}
static void displayList(){
String line = null;
try
{
/* FileReader reads text files in the default encoding */
FileReader fileReader = new FileReader("MovieSeats.txt");
/* always wrap the FileReader in BufferedReader */
BufferedReader bufferedReader = new BufferedReader(fileReader);
while((line = bufferedReader.readLine()) != null)
{
System.out.println(line);
}
/* always close the file after use */
bufferedReader.close();
}
catch(IOException e)
{
System.out.println("Error reading file name");
}
}
public static void main (String[]args) throws IOException {
String yn;
do{
System.out.println("\t\tMOVIE SEAT RESERVATION");
System.out.println("===========================================================");
System.out.println("\t\tA. Reserve Seat");
System.out.println("\t\tB. Cancel Reserve Seat");
System.out.println("\t\tD. Display List of Reserved Seat ");
System.out.println("\t\tE. Clear Seats");
System.out.println("\t\tF. Quit");
System.out.println("===========================================================");
System.out.println();//SPACE
System.out.print("Enter a valid input: ");
String choice = user.next();
switch(choice.toUpperCase()){
case "A":
ReserveSeat();
break;
case "B":
break;
case "C":
break;
case "D":
displayList();
break;
case "E":
break;
case "F":
System.exit(0);
break;
default:
System.err.println("Invalid Input, Please try again.");
break;
}
System.out.print("Do you want to try again? ");
yn= user.next();
}
while(yn.equalsIgnoreCase("Y"));
}
}
最佳答案
IsOcupied
方法中的以下代码行 if (MSR[i][1].equals(Seat))
会引发 NullPointerException
。您正在调用 MSR[i][1]
上的 .equals
方法,其中包含 null
。
在调用 .equals
之前,您必须为该元素分配一个值。您可以检查该元素是否为null
,如果是,则返回false
(=座位尚未被占用)。
static boolean IsOccupied(String Seat) {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 3; j++) {
if (MSR[i][1] != null && MSR[i][1].equals(Seat)) {
MSR[i][2]="X";
return true;
}
}
}
return false;
}
将首先评估 null
检查,因此如果 MSR[i][1] != null
返回 false,则 AND (&& ) 运算符不会被评估。这意味着您将不再检查 .equals
是否为 null。
关于java - NullPointerException,使用数组预订座位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59115390/