【问题标题】:The attributes of my classes are changing themselves [closed]我的班级的属性正在改变自己[关闭]
【发布时间】:2022-01-19 02:57:12
【问题描述】:

我目前正在编写一个酒店游戏,我的酒店房间有自己的房间号。在第一个 for 循环中,我正在调用 addRoom 函数并打印酒店房间的房间号。我得到的结果是

Test 1- Room Number: 1
Test 1- Room Number: 2
Test 1- Room Number: 3

然后在第二个 for 循环中我得到的结果是

Test 2- Room Number: 3
Test 2- Room Number: 3
Test 2- Room Number: 3        

代码:

    for (int i = 0; i < 3; i++) {
        addRoom(0);
        System.out.println("Test 1- Room Number: " + hotelRooms.get(i).getNum());
    }

    for (int i = 0; i < 3; i++) {
        System.out.println("Test 2- Room Number: " + hotelRooms.get(i).getNum());
    }

这些循环彼此相邻,所以我不确定它们为什么要打印不同的东西。这是我的 addRoom 函数。

public void addRoom(int i){
    hotelRooms.add(allRooms.get(i));
    System.out.println(hotelRooms.size());
    hotelRooms.get(hotelRooms.size()-1).setNum(hotelRooms.size());
    funds -= allRooms.get(i).getBuyCost();
    moneyInfo.setText("$" + funds);
    hotelInfo.setText("Rooms: " + hotelRooms.size() + "\nAmenities: " + hotelAmenities.size() + "\nCustomers: " + customers.size());
    System.out.println("function end");
}

这是我的 Room 课程。

public Rooms(String t, int p, int m, int b, int l){
    type = t;
    occupied = false;
    price = p;
    monthlyCost = m;
    buyCost = b;
    level = l;
    messy = 0;
}

public int getNum(){
    return num;
}

public void setNum(int n){
    this.num = n;
}

【问题讨论】:

  • 可能是一个静态字段。显示您的完整代码。
  • hotelRooms 中的所有条目都包含相同的实例,allRooms.get(0)
  • 是的,请出示您的代码。几乎可以肯定Rooms 正在使用一些静态字段。
  • 这个问题与两小时前的the one you posted 有何不同?

标签: java class properties


【解决方案1】:

针对您的问题: 房间号的最新值似乎是保留的值,因为您可能没有存储单独的“房间号”实例。您应该为每个房间实例化一个新的房间号。真的,这里应该有更多的代码。

这很无聊且重复,但是实例化这些新的房间号对象,应该是一个单独的类或包含在“Rooms”类中,这是必要的,超出了足够的强调。真的,我会选择一个单独的类,它是“房间”的子类。没有必要让它比一个带有子类的超类更复杂。当然,将数字作为“房间”的参数可能更简单。然后,您可以将每个房间实例化为“房间”,借出一些语法问题。

职业建议?(硕士生)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    相关资源
    最近更新 更多