-3
   @Override
public void actionPerformed(ActionEvent event){
    JButton current;
    int turn=0;
    for(int i=0; i< buttons.length;i++){ 
        for(int j =0; j<buttons.length; j++){
            while(event.getSource().equals(buttons[i][j])){
            if(turn==0){
                current=buttons[i][j];
                current.setText("X");//current sets the text i,j to x.
                turn++;
                }
            else if(turn==1){
            current=buttons[i][j];
            current.setText("O");
            turn--;

                }
            }
        }//end j
    }//end i
}//end actionperformed.

好的,所以我尝试在 x 和 o 之间进行转换,所以这种方法是执行动作的方法,但是由于某种原因,当我运行程序时,它总是在我单击按钮时冻结。我想我用while循环搞砸了嵌套的for循环(不完全确定它是如何执行的)。

4

2 回答 2

4

您有三个循环,但您不需要任何循环。如果我理解正确,您想要的是将单击按钮的文本设置为 X 或 O,具体取决于turn. 并且单击的按钮由event.getSource(). 所以方法应该简单地是:

public void actionPerformed(ActionEvent event) {
    JButton clicked = (JButton) event.getSource();
    if (turn == 0) {
        clicked.setText("X");
        turn++;
    }
    else {
        clicked.setText("O");
        turn--;
    }
}

请注意,鉴于 turn 只能有两个值,您应该将其设为布尔值:

public void actionPerformed(ActionEvent event) {
    JButton clicked = (JButton) event.getSource();
    clicked.setText(turn ? "X" : "O");
    turn = !turn;
}
于 2013-07-26T16:41:25.940 回答
0

您正在buttons.length水平和垂直使用,但您的按钮数量与您的列/行数不同。事实上,这个数字是列数乘以行数。尝试在此号码上使用 sqrt。

turn此外,您应该使用布尔值而不是整数变量,并在每轮之后写入: turn = !turn

编辑:此外,我不明白你为什么使用while.

于 2013-07-26T16:39:15.283 回答