我用java工作了一年多一点。我最近已经建立了一个tic tac tow游戏作为我的java类的任务。在讲师评分之后,他围绕我的验证方法逻辑写了一条评论。即使我得到100%,他说我的验证方法中的逻辑太麻烦了。他说我会查看for语句或while语句,以便清除验证方法中的一些代码。这是我的问题是,有没有办法将所有条件if语句放入for循环或while循环?如果是这样,我想知道背后有什么逻辑。这个程序有一组五个数组,但在这个验证方法中我只使用了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");
}
}
答案 0 :(得分:0)
如果有一种方法可以使用按钮组合的数学进展来找到获胜者,那么您可以在循环中提取检查。
您还可以通过提取重复性任务来重构代码,例如(如已建议的那样)执行此操作:
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;