条件if语句和For语句



我已经使用java一年多了。我最近为我的java课做了一个井字游戏作为作业。老师评分后,他对我的验证方法逻辑写了评论。即使我得到了100%他说我的验证方法中的逻辑太麻烦了。他说,我检查for语句或while语句是为了清理验证方法中的一些代码。这是我的问题真的有办法把所有条件if语句放到for循环或while循环中吗?如果是的话,我想知道这背后的逻辑是什么。这个程序有一组5个数组,但是在这个验证方法中,我只处理JButton数组。

JButton button = new Jbutton[9];
public void validate()
    {
        if(button[0].getText().equals(button[1].getText()) && button[1].getText().equals(button[2].getText()))
        {
            JOptionPane.showMessageDialog(null,"Thank you the winner is" + button[0].getText());
            gameOver();
            return;
        }
        else if(button[3].getText().equals(button[4].getText()) && button[4].getText().equals(button[5].getText()))
        {
            JOptionPane.showMessageDialog(null,"Thank you the winner is" + button[3].getText());
            gameOver();
            return;
        }
        else if(button[6].getText().equals(button[7].getText()) && button[7].getText().equals(button[8].getText()))
        {
            JOptionPane.showMessageDialog(null,"Thank you the winner is" + button[6].getText());
            gameOver();
            return;
        }
        else if(button[0].getText().equals(button[3].getText()) && button[3].getText().equals(button[6].getText()))
        {
            JOptionPane.showMessageDialog(null,"Thank you the winner is" + button[0].getText());
            gameOver();
            return;
        }
        else if(button[1].getText().equals(button[4].getText()) && button[4].getText().equals(button[7].getText()))
        {
            JOptionPane.showMessageDialog(null,"Thank you the winner is" + button[1].getText());
            gameOver();
            return;
        }
        else if(button[1].getText().equals(button[4].getText()) && button[4].getText().equals(button[7].getText()))
        {
            JOptionPane.showMessageDialog(null,"Thank you the winner is" + button[1].getText());
            gameOver();
            return;
        }
        else if(button[2].getText().equals(button[5].getText()) && button[5].getText().equals(button[8].getText()))
        {
            JOptionPane.showMessageDialog(null,"Thank you the winner is" + button[2].getText());
            gameOver();
            return;
        }
        else if(button[0].getText().equals(button[4].getText()) && button[4].getText().equals(button[8].getText()))
        {
            JOptionPane.showMessageDialog(null,"Thank you the winner is" + button[0].getText());
            gameOver();
            return;
        }
        else if(button[2].getText().equals(button[4].getText()) && button[4].getText().equals(button[6].getText()))
        {
            JOptionPane.showMessageDialog(null,"Thank you the winner is" + button[2].getText());
            gameOver();
            return;
        }
        int i;
        for(i=0;i<button.length;i++)
        {
            if(button[i].isEnabled())
            {
                break;
            }
        }

        if(i == button.length)
        {
            JOptionPane.showMessageDialog(null,"This was a Draw");
        }
    }

如果有一种方法可以使用按钮组合的数学级数找到获胜者,那么您可能可以在循环中提取检查。

您还可以通过提取重复的任务来重构您的代码,例如(如已经建议的)这样做:

  • 在单独的函数中提取按钮的if条件
  • 在单独的函数中提取消息
  • 在单独的函数中提取返回索引并调用gameOver()并只返回一次

你的代码会更容易读,更短:

    private Boolean checkConditionFor(int button1, int button2, int button3) {
        return button[button1].getText().equals(button[button2].getText()) 
            && button[button2].getText().equals(button[button3].getText());
    }
    private void messageFor(int id) {
        JOptionPane.showMessageDialog(null, "Thank you the winner is" + button[id].getText());
        gameOver();
    }
    private int winner() {
        if(checkConditionFor(0, 1, 2) || 
           checkConditionFor(0, 3, 6) || 
           checkConditionFor(0, 4, 8)) { return 0; }
        if(checkConditionFor(3, 4, 5)) { return 3; }
        if(checkConditionFor(6, 7, 8)) { return 6; }
        if(checkConditionFor(1, 4, 7)) { return 1; }
        if(checkConditionFor(2, 5, 8) || 
           checkConditionFor(2, 4, 6)) { return 2; }
    }

现在只需调用validate方法中的函数:

    messageFor(winner());
    return;

相关内容

  • 没有找到相关文章

最新更新