【发布时间】:2017-11-20 02:38:11
【问题描述】:
我正在研究可以在图像上绘制矩形的东西。它工作得很好,因为 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,应该存在,它并没有执行 Coordinate 的 for 循环,正如丢失的 System.out 所看到的那样。我在这里看什么?我想我可能遗漏了一些非常明显的东西......
【问题讨论】:
标签: java loops for-loop arraylist methods