我的班级的属性正在改变自己[关闭]

Posted

技术标签:

【中文标题】我的班级的属性正在改变自己[关闭]【英文标题】: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 有何不同? 【参考方案1】:

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

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

职业建议?(硕士生)

【讨论】:

以上是关于我的班级的属性正在改变自己[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

关闭程序基地址改变

班级没有成员发言? [关闭]

为啥我的属性在 PropertyChange 之后没有改变? [关闭]

红色预警

每当我想从我的班级运行 Intent 时,NPE [重复]

自己定义RatingBar,能依据设置改变样式