gpt4 book ai didi

java - 将对象添加到数组时出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-02 04:29:52 25 4
gpt4 key购买 nike

好吧,我遇到了一些生成空指针异常的代码问题,这意味着我的代码试图在应该使用对象的地方使用空值(直接从 API 中)。我正在做的是一个名为 Hotel 的类,它有一个构造函数,它将字符串值分配给变量并创建一个 Room 类型的数组(一个对象)。我知道这应该是直截了当的,但我一生都无法弄清楚这一点。

我会尝试使代码尽可能简洁:

对象 Hotel 的构造函数,用于创建大小为 NUM_ROOMS 的新数组

以下是包含的更新,不幸的是我仍然遇到空指针问题

public Hotel(String hotelName)
{
name = hotelName;
theRoom = new Room[NUM_ROOMS];
}

这个构造函数创建一个 Room 类型的数组,其参数被分配给变量

public Room(String guestName, int partySize, int bedCountRequired,
double ratePerDay, int daysStaying)
{
guest = guestName;
number = partySize;
numBeds = bedCountRequired;
rate = ratePerDay;
numOfDays = daysStaying;
}

下面的方法应该是:

1) 使用提供的参数创建对象 Room 的新实例

2) 在索引 roomsRented 处为该实例分配一个数组引用(在代码首次初始化时定义为零,然后增加 1)

public void addReservation(String guestName, int partySize,
int bedCountRequired, double ratePerDay, int daysStaying)
{
Room roomHolder = new Room(guestName, partySize, bedCountRequired,
ratePerDay, daysStaying);

theRoom[roomsRented] = roomHolder;

roomsRented++;
}

我遇到的问题是

theRoom[roomsRented] = roomHolder;

似乎会导致空指针异常。我还从 Eclipse 收到一个错误,指出数组变量 theRoom 未使用,尽管我在上述方法中使用了它。这让我相信我没有正确引用该对象。但是,我不知道为什么该引用不正确,即使我替换为 theRoom[0],编译器仍然给我一个空指针。我没有看到我的数组构造有任何问题,这对我来说意味着可能导致空指针异常的唯一问题是如果我没有引用数组中的任何值。

有什么想法吗?

提前感谢您的贡献,如果答案非常简单,我们深表歉意。

编辑***感谢您的帮助,找不到变量的问题已经解决,但每次我尝试引用数组中的对象时,我仍然遇到空指针异常。这是我如何尝试引用数组的示例:

public double getTotalRentalSales()
{
// Iterate through the array
for (int i = 0; i < theRoom.length; i++)
{
// sum the amount money received per rental
totalRate = totalRate + theRoom[i].getRate();
}
// Return total
return totalRate;
}

其中 getRate() 是从对象 Room 返回可变利率的方法

totalRate = totalRate + theRoom[i].getRate();

在这种情况下会导致空指针。我的对象引用有问题吗?

最佳答案

问题是,在构造函数中,您在其范围内定义了一个名为 theRoom 的变量,这意味着您不会将值 new Room[NUM_ROOMS] 分配给名为 theRoom 而是构造函数内名为 theRoom 的变量。

只需删除构造函数中的类型声明 (Room[]),它就会按预期工作。我还建议以后使用 this 关键字来帮助您避免此类问题。

public Hotel(String hotelName)
{
this.name = hotelName;
this.theRoom = new Room[NUM_ROOMS];
}

关于java - 将对象添加到数组时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13537181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com