簡體   English   中英

如何修復我的空指針異常

[英]How do I fix my null pointer exception

為類分配代碼,並在這些行上獲得空指針異常(在我的代碼中用粗體和斜體表示):我不明白這些行是如何指向空白的,就像第一個是我的代碼試圖設置某個座位的名稱,但是顯然我不能,因為它為null,即使我將我設置為0,將名字設置為空字符串,等等。helP!

public class Passenger {
    String FirstName;
    String LastName;

    void getName() {
        FirstName = " ";
        LastName = " ";
    }

    void getName(String first, String last) {
        FirstName = first;
        LastName = last;
    }

    String getFirst() {
        return FirstName;
    }

    String getLast() {
        return LastName;
    }

    void setFirstName(String tempfirst) {
        FirstName = tempfirst;
    }

    void setLastName(String templast) {
        LastName = templast;
    }

    void printNames() {
        System.out.printf("%s %s\n", this.getFirst(), this.getLast());
    }

    public static void main(String[] args) {
    }
}

public class WaitingList extends Passenger {
    Passenger[] waitlist = new WaitingList[10];

    WaitingList(){
        for(int i = 0; i<10;i++){
            ***waitlist[i].setFirstName("");***
            waitlist[i].setLastName("");
        }}

    void printWaitingList() {
        for (int j = 0; j < 10; j++)
            waitlist[j].printNames();
    }

    void setPassenger(int i, Passenger tempPass) {
        waitlist[i] = tempPass;
    }

    Passenger getPassenger(int i) {
        return waitlist[i];
    }

    public static void main(String[] args) {
    }

}

import java.io.Console;
import java.util.Scanner;

public class SeatingChart extends WaitingList {
    Passenger[][] pass = new Passenger[10][4];

    SeatingChart() {
        for (int row = 0; row < 10; row++) {
            for (int col = 0; col < 4; col++) {
                pass[row][col] = new Passenger();
            }
        }
    }

    void printSeatingChart() {
        for (int row = 0; row < 10; row++) {
            for (int col = 0; col < 4; col++) {
                System.out.print(pass[row][col].getFirst() + "\t");
                System.out.print(pass[row][col].getLast() + "\n");
            }
        }
    }

    String getSeatChoicefromUser() {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter preferred seat (row, column): ");
        String seat = scanner.next();
        return seat;
    }

    void setPassenger(int row, int col, Passenger temppass) {
        pass[row][col] = temppass;
    }

    Passenger getPassenger(int row, int col) {
        return pass[row][col];
    }

    Passenger search(String first, String last) {
        Passenger search = new Passenger();
        for (int row = 0; row < 10; row++) {
            for (int col = 0; col < 4; col++) {
                String tempfirst = pass[row][col].getFirst();
                String templast = pass[row][col].getLast();
                if (tempfirst.equals(first)) {
                    if (templast.equals(last)) {
                        search = pass[row][col];
                        removePassenger(row, col);
                    }
                } else {
                    search = null;
                    System.out.print("\nPassenger not found\n");
                }
            }
        }
        return search;
    }

    void removePassenger(int row, int col) {
        pass[row][col].setFirstName(null);
        pass[row][col].setLastName(null);
    }

    Passenger reconcileWithWaitingList() {
        int i = 0;
        Passenger pass = new Passenger();
        String tempfirst = waitlist[i].getFirst();
        String templast = waitlist[i].getLast();
        if (tempfirst.equals(null)) {
            if (templast.equals(null))
                System.out.print("\nWaiting list is empty\n");
        } else {
            pass = waitlist[i];
            for (i = 0; i < 10; i++)
                waitlist[i] = waitlist[i + 1];
        }
        return pass;
    }

    public void addPassengerToWaitingList(int wrow, int wcol) {
        Passenger addPass = new Passenger();
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter first name: ");
        String tempfirst = sc.next();
        System.out.print("Enter last name: ");
        String templast = sc.next();
        addPass = search(tempfirst, templast);
        if (addPass == null) {
            String tempfirst1 = pass[wrow][wcol].getFirst();
            String templast1 = pass[wrow][wcol].getLast();
            if (tempfirst1.equals(null)) {
                if (templast1.equals(null)) {
                    pass[wrow][wcol].setFirstName(tempfirst1);
                    pass[wrow][wcol].setLastName(templast1);
                }
            }
        } else
            System.out.print("Passenger already present!");
    }

    public static void main(String[] args) {
    }
}

您的等待列表數組包含空元素。 您必須先初始化元素,然后再嘗試使用它們。

Passenger[] waitlist = new WaitingList[10];

WaitingList(){
    for(int i = 0; i<10;i++){
       waitlist[i] = new WaitingList();  // *** first create an element 
       waitlist[i].setFirstName("");   // *** before using it.
       waitlist[i].setLastName("");
    }
}

想一想類似於停車場的對象陣列。 當您創建與創建批次相同的數組時,盡管批次擁有很多空間,但最初批次是空的。 在您第一次汽車放入卡車之前,您不能駕駛任何汽車。 同樣,您不能使用任何數組項,除非它們引用誠實對象。


編輯
關於您的評論,

在同一行上給了我一個堆棧溢出錯誤

這是一個全新的錯誤-您那里有一些遞歸代碼。 該問題是由於以下代碼引起的:

public class WaitingList extends Passenger {
   Passenger[] waitlist = new WaitingList[10];
  • 首先,WaitingList不應是旅客的子類。 這沒有意義,因為候補名單的概念不是乘客概念的特殊情況。 換句話說,它不滿足繼承的“是”標准。 相反,它滿足“具有”標准-等候名單上有乘客,而不是-乘客。 因此,請改用合成。
  • 接下來,WaitingList類不應創建並填充WaitingLists數組,因為這將導致無限遞歸,每個新的WaitingList對象將創建10個新的WaitingList對象,每個對象將創建10個以上WaitingList對象,每個對象將...問題? 相反,WaitingList類可能不應該繼承自其他任何類,並且應包含一個Passenger對象而不是WaitingList對象的數組(或ArrayList)。

您的代碼有很多問題,您可能希望重新啟動該項目。

在此處輸入圖片說明


嘿,您聲明array of references您需要做的是在使用它們之前初始化這些空引用

for(int i=0; i< waitlist.length;++i){
    waitlist[i] = new waitlist();
}

然后調用你的函數

用它替換您的乘客艙代碼。 玩得開心 :)

 public class Passenger {
        String FirstName = "";
        String LastName = "";
        void getName(){
            FirstName="";
            LastName="";}
        void getName(String first, String last){
            if(first != null)
            {    
                 FirstName=first;
            }
         else
         {
           FirstName = "";
         }
         if(last != null)
         {
            LastName=last;
         }
         else
         {
           LastName = "";
         }
        }
        String getFirst(){
            return FirstName;}
        String getLast(){
            return LastName;}
        void setFirstName(String tempfirst){
           if(tempfirst == null)
           {
             FirstName = "";
           }
           else
           {        
             FirstName=tempfirst;
           }
        }
        void setLastName(String templast){
           if(templast == null)
           {
             LastName="";
           }
           else
           {
            LastName=templast;
           }
        }
        void printNames(){
            System.out.printf("%s %s\n", this.getFirst(), this.getLast());
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM