Java NullPointerException,使用数组预订座位
有人能查一下这个代码吗?我一直收到这个错误Java NullPointerException,使用数组预订座位,java,arrays,exception,multidimensional-array,Java,Arrays,Exception,Multidimensional Array,有人能查一下这个代码吗?我一直收到这个错误 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) 我不知道我做错了什么。我一直在用数组预订座位。我想预订一个座位
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"));
}
}
成套工程;
导入java.util.*;
导入java.io.*;
公共类项目{
静态字符串MSR[][]=新字符串[10][3],名称,座位号,保留;
静态扫描仪用户=新扫描仪(System.in);
静态布尔IsEmpty(){
对于(int i=0;i<10;i++){
对于(int j=0;j<3;j++){
如果(MSR[i][1]!=null){
返回false;
}
}
}
返回true;
}
静态布尔值IsFull(){
对于(int i=0;i<10;i++){
对于(int j=0;j<3;j++){
if((MSR[i][2])==null){
返回false;
}
}
}
返回true;
}
静态void ReserveSeat()引发IOException{
PrintWriter保存=新的PrintWriter(“MovieSeats.txt”);
如果(IsFull()){
System.out.println(“所有座位都被占用”);
}
否则{
系统输出打印(“将座位号输入预留:”);
SeatNo=user.next();
if(等容量(SeatNo)){
int RSeatNo=Integer.parseInt(SeatNo);
MSR[RSeatNo][1]=SeatNo;
保存。打印(SeatNo);
系统输出打印(“输入名称:”);
Name=user.next();
MSR[RSeatNo][0]=名称;
保存。打印(名称);
保留=“X”;
MSR[RSeatNo][2]=保留;
保存。打印(保留);
}
否则{
系统输出打印项次(“座位已被占用”);
}
}
}
静态布尔等容座(弦座){
对于(int i=0;i<10;i++){
对于(int j=0;j<3;j++){
如果(MSR[i][1]。等于(席位)){
MSR[i][2]=“X”;
返回true;
}
}
}
返回false;
}
静态void displayList(){
字符串行=null;
尝试
{
/*FileReader以默认编码读取文本文件*/
FileReader FileReader=newfilereader(“MovieSeats.txt”);
/*始终将文件读取器包装在BufferedReader中*/
BufferedReader BufferedReader=新的BufferedReader(文件阅读器);
而((line=bufferedReader.readLine())!=null)
{
系统输出打印项次(行);
}
/*使用后始终关闭文件*/
bufferedReader.close();
}
捕获(IOE异常)
{
System.out.println(“读取文件名时出错”);
}
}
公共静态void main(字符串[]args)引发IOException{
字符串yn;
做{
System.out.println(“\t\t移动座位预订”);
System.out.println(“===========================================================================================”);
System.out.println(“\t\tA.Reserve Seat”);
System.out.println(“\t\tB.取消预订座位”);
System.out.println(“\t\tD.预留座位显示列表”);
System.out.println(“\t\tE.Clear Seats”);
System.out.println(“\t\tF.Quit”);
System.out.println(“===========================================================================================”);
System.out.println();//空格
System.out.print(“输入有效输入:”);
字符串选择=user.next();
开关(choice.toUpperCase()){
案例“A”:
预留座位();
打破
案例“B”:
打破
案例“C”:
打破
案例“D”:
显示列表();
打破
案例“E”:
打破
案例“F”:
系统出口(0);
打破
违约:
System.err.println(“输入无效,请重试”);
打破
}
System.out.print(“您想再试一次吗?”);
yn=user.next();
}
而(Y);;
}
}
在isocupied
方法的if块中,使用Seat.equals(MSR[i][1])
而不是使用MSR[i][1]。equals(Seat)
。数组元素最初为null,当尝试执行equals
方法时,这会在此行生成NullPointerException。下面的代码行if(MSR[i][1].equals(Seat))
方法中的IsOcupied
抛出NullPointerException
。您正在MSR[i][1]
上调用.equals
方法,该方法包含null
在对该元素调用.equals
之前,必须为该元素指定一个值。您可以检查元素是否为null
,如果为null,则返回false
(=座椅尚未占用)
static boolean isocupied(字符串座){
对于(int i=0;i<10;i++){
对于(int j=0;j<3;j++){
如果(MSR[i][1]!=null&&MSR[i][1]。等于(座位)){
MSR[i][2]=“X”;
返回true;
}
}
}
返回false;
}
将首先计算null
检查,因此如果MSR[i][1]!=null
返回false,则不会计算AND(&&)运算符的右侧操作数。这意味着您将不再在null上检查.equals
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;
}