gpt4 book ai didi

java - 对于(房间 r : ArrayList) returns empty Room

转载 作者:行者123 更新时间:2023-12-02 02:45:45 26 4
gpt4 key购买 nike

我正在研究可以在图像上绘制矩形的东西。它工作得很好,因为 JavaFX 很容易,但我遇到了一个我似乎不理解的小问题。

我一直使用 for (object b : ArrayList) ,但从未发生过这种情况。这是代码的重要部分:

    private void drawRooms() {
System.out.println("=========================================");
gc.clearRect(0, 0, canvas.getWidth(), canvas.getHeight());
gc.drawImage(image, 0, 0);
boolean bFirst = true;
double lastX = 0.0, firstX = 0.0, lastY = 0.0, firstY = 0.0;
gc.setStroke(RED);
gc.setLineWidth(10);
System.out.println("alRooms " + alRooms.toString());
for (Room r : alRooms) {
System.out.println("r " + r.getCords());
for (Coordinate c : r.alCords) {
System.out.println("C " + c.getX());
if (bFirst) {
bFirst = false;
lastX = firstX = c.getX();
lastY = firstY = c.getY();
} else {
gc.strokeLine(lastX, lastY, c.getX(), c.getY());
lastX = c.getX();
lastY = c.getY();
}
}
gc.strokeLine(firstX, firstY, lastX, lastY);
bFirst = true;
}
}

这是在创建所述房间之后调用drawRoom()的地方:

                        alRooms.add(new Room(txRoomName.getText(), alCords));
System.out.println("alRooms size " + alRooms.size());
System.out.println("alRoom to string " + alRooms.toString());
alCords.clear();
drawRooms();

忽略System.out.println,我一直用它来调试。无论如何,这是控制台输出:

Created new CoorRoom asd
[tcp_test_beacon.Coordinate@71afa660, tcp_test_beacon.Coordinate@8227d0c, tcp_test_beacon.Coordinate@1c50a611, tcp_test_beacon.Coordinate@2a467bed]
alRooms size 1
alRoom to string [tcp_test_beacon.Room@26565463]
=========================================
alRooms [tcp_test_beacon.Room@26565463]
r []

如您所见,我创建了一个房间并将其添加到 alRooms(一个 ArrayList)中。它的 toString() 在添加房间之后,返回与 for() 循环之前的 toString() 相同的结果。我还显示了房间的 alCords.toString,这意味着它具有某种值。之后,它进入 r 循环,但 getCords() 什么也不返回。这已经很奇怪了,Object Room 的 getCords() 看起来像这样:

    public ArrayList<Coordinate> getCords(){
return alCords;
}

之后,即使认为 r.alCords(这是一个 ArrayList)应该存在,但它不存在,并且 Coordination 的 for 循环从未执行,正如丢失的 System.out 所见。我在这里看到什么?我想我可能错过了一些非常明显的东西......

最佳答案

从您的代码片段中,您可以看到,您使用坐标创建了新的房间:

 alRooms.add(new Room(txRoomName.getText(), alCords));
System.out.println("alRooms size " + alRooms.size());
System.out.println("alRoom to string " + alRooms.toString());
alCords.clear();

在创建新的Room期间,您传递的不仅仅是新的List,而是对该对象的引用!您稍后将在方法执行之前清除它!

alRooms.add(new Room(txRoomName.getText(), alCords));alCords.clear();

稍后我们可以看到,您的 foeach 语句执行正确,因为您可以看到这一行 r []。但是由于上述原因,CooperativesList 是空的。只需将代码更改为如下所示:

 alRooms.add(new Room(txRoomName.getText(), new ArrayList(alCords)));
System.out.println("alRooms size " + alRooms.size());
System.out.println("alRoom to string " + alRooms.toString());
alCords.clear();

关于java - 对于(房间 r : ArrayList<Room>) returns empty Room,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44604134/

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