Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GUI逻辑错误Tic Tac Toe当O获胜时它不';不要立刻出现_Java_Swing_Logic Error - Fatal编程技术网

Java GUI逻辑错误Tic Tac Toe当O获胜时它不';不要立刻出现

Java GUI逻辑错误Tic Tac Toe当O获胜时它不';不要立刻出现,java,swing,logic-error,Java,Swing,Logic Error,我的井字游戏有逻辑错误 我已经用Java编写了代码 这是每次我放置X时都会放置O的方法 /* creating method to place O*/ private void placeO(){ String[] arr = { b1.getText() , b2.getText() , b3.getText(), b4.getText() , b5.getText() , b6.getText(),

我的井字游戏有逻辑错误 我已经用Java编写了代码 这是每次我放置X时都会放置O的方法

   /* creating method to place O*/
private void placeO(){
        String[] arr = { b1.getText() , b2.getText() , b3.getText(),
                         b4.getText() , b5.getText() , b6.getText(),
                         b7.getText() , b8.getText() , b9.getText()};
        
        boolean check = true;
        try{
        boolean result = checkForWinner(arr);
        while(check){
            /*if there is a winner or tie then stop */
            if(result == true){
                break;
            }
            int r = (int)( Math.random()* 8 ) ;
            /*generate random number between 0 and 8 */
            if(arr[r] == ""){
                switch(r){
                    case 0 : b1.setText("O");break;
                    case 1 : b2.setText("O");break;
                    case 2 : b3.setText("O");break;
                    case 3 : b4.setText("O");break;
                    case 4 : b5.setText("O");break;
                    case 5 : b6.setText("O");break;
                    case 6 : b7.setText("O");break;
                    case 7 : b8.setText("O");break;
                    case 8 : b9.setText("O");
                }
               check = false;
            }
        }
            }catch(Error e){
            System.out.print(e);
        }
}
每次我按下按钮,这个事件就会发生

 private void b8ActionPerformed(java.awt.event.ActionEvent evt) {                                   
      if(b8.getText() == ""){
       b8.setText("X");
       placeO(); 
   } 
}    
我面临的问题是,每次O赢了,直到我再放一个X,消息才会出现
是否有办法修复此错误逻辑?

在放置“X”并放置
布尔结果=checkForWinner(arr)后,尝试在您的
private void b8ActionPerformed
中检查赢家在“O”的回合结束时


这将修复逻辑错误。

在放置“X”并放置
布尔结果=checkForWinner(arr)后,尝试在您的
private void b8ActionPerformed
中检查赢家在“O”的回合结束时


这将修复逻辑错误。

我猜在播放X或O之后,您需要检查赢家。在我看来,你是在玩O之前检查赢家。你不应该在棋子放好之后检查赢家吗?移动
布尔结果=checkForWinner(arr)在你的切换语句之后到。我猜你需要在播放X或O后检查赢家。在我看来,你是在玩O之前检查赢家。你不应该在棋子放好之后检查赢家吗?移动
布尔结果=checkForWinner(arr)在switch语句之后执行。