[英]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];
您的代碼有很多問題,您可能希望重新啟動該項目。
嘿,您聲明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.