检查空间是否为空或在双ArrayList中占用

时间:2014-02-12 18:00:13

标签: java arraylist

在我的Tic-tac-toe程序中,有三行和三列。游戏将由两个人玩。

程序将通过键入单元格坐标,通过Scanner类(System.in)获得用户输入。我想阻止用户进入已经填充的坐标。我认为通过使用两个(嵌套的)'for循环'来实现它可能是一个好主意,它会检查行和列是否已经填充。

因此,在第一次检查中,将占用一个插槽,如果用户输入与前一个相同的坐标,我可以向用户打印消息,该插槽不为空。

但问题是,当这两个嵌套的for循环再次运行时(因为我将它们放入一个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);
    }
}

有没有更好的方法来实现这个逻辑?

1 个答案:

答案 0 :(得分:0)

public boolean isOccupied(int x, int y){

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

    return false;
}