簡體   English   中英

檢查空間是否為空或是否被雙倍ArrayList占用

[英]Checking if the space is empty or occupied in double ArrayList

在我的井字游戲程序中,有三行三列。 游戲將由兩個人玩。

該程序將通過鍵入單元格坐標來通過Scanner類(System.in)獲取用戶輸入。 我想防止用戶輸入已經填充的坐標。 我認為通過使用兩個(嵌套的)“ for循環”來實現此目的可能是一個好主意,該循環將檢查行和列是否已被填充。

因此,在第一次檢查時,將占用一個插槽,如果用戶輸入的坐標與上一個相同,則我可以向用戶顯示一條消息,指出該插槽不為空。

但是問題在於,當這兩個嵌套的for循環再次運行時(因為我將它們放入了while循環中,在播放器之間切換的代碼位於該while循環中),它將開始再次檢查Array表中的每個單元。 然后,程序將告訴我,即使第二個用戶沒有輸入與第二個相同的坐標,該插槽也已被填充。

我希望代碼的行為方式如下:在用戶輸入該單元格的坐標之后,它僅檢查表中的特定單元格。

我失敗的方法isOccupied()看起來像這樣-

public boolean isOccupied() {
    for (int r = 0; r < 3; r++) { 
        for (int c = 0; c < 3; c++) {
            if (board.get(r).get(c) != null) {
                return false;
            }
        }
    } 
    return true;
}

下面是我的while循環;

while (scanner.hasNext() && !board.hasWon()){
        int x = scanner.nextInt();
        int y = scanner.nextInt();          
        if (player){
            System.out.println("Player 2. Please enter your coordinate:");
            board.setPiece(x, y, "x");
            if (board.hasWon()){
                System.out.println(board);
                System.out.println("Player 1 has won!");
                break;

            }           
            else{
                player = false;
            }   
        }else {
            board.setPiece(x, y, "o");
            if (board.hasWon()){
                System.out.println(board);
                System.out.println("Player 2 has won!");
                break;
            }else{
                player = true;
            }

            System.out.println("Player 1. Please enter your coordinate:");
        }
        System.out.println(board);
    }
}

有沒有更好的方法來實現此邏輯?

public boolean isOccupied(int x, int y){

    return (board.get(x).get(y) != null);
        return true;
    }

    return false;
}

暫無
暫無

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

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