簡體   English   中英

for(Room:ArrayList <Room> )返回空房間

[英]for(Room r : ArrayList<Room>) returns empty Room

我正在研究可以在圖像上繪制矩形的東西。 由於JavaFX輕而易舉,它的效果很好,但是我遇到了一個我似乎不太了解的小問題。

我一直在使用for(對象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 []

如您所見,我創建了一個房間並將其添加到ArrayList的alRooms中。 在添加房間之后,它的toString()返回與for()循環之前的toString()相同。 我還獲得了顯示房間的alCords.toString,這意味着它具有某種值。 之后,它進入r循環,但是getCords()不返回任何內容。 這已經很奇怪了,因為對象室的getCords()看起來像這樣:

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

之后,甚至想到r.alCords(它是一個ArrayList)應該存在,它不存在,並且從不執​​行Coordinate的for循環,就像丟失的System.out所看到的那樣。我在這里看什么? 我想我可能遺漏了一些非常明顯的東西...

檢查您是否設置了有效的alCords並且該值不為空。 在線調試

alRooms.add(new Room(txRoomName.getText(), alCords)); // Debug here

從您的代碼片段中,您可以看到您創建了帶有CoorinatesRoom

 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 [] 但是由於上述原因,“ Coordinates List ”為空。 只需將您的代碼更改為如下所示:

 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM