我正在开发一个我使用JFrame
编码的小游戏。我创建了一个JPanel
,其中我创建了一个使用JButtons
创建的棋盘。我必须检查列/行和对角线中的任何字母是否相同。所以我创建了一个方法,为我做到这一点。问题是我放入方法的第一个声明即使程序实际到达代码部分也不会禁用该按钮。所以我尝试了一些方法来修复它,我只是不明白为什么第一个循环不会在跟随循环时禁用Button。
private void checkRepetitions()
{
Boolean check = false;
int i, j;
//check in line
i = lastI;
for (j = 0; j < 8; j++) {
if (tab[lastI][lastJ].getText().equals(tab[i][j].getText()) && lastI != j && !tab[lastI][lastJ].getText().equals("")) {
confirm.setEnabled(false);
check = true;
break;
} else {
confirm.setEnabled(true);
}
}
//checkin column
j = lastJ;
for (i=0; i<8; i++){
if(tab[lastI][lastJ].getText().equals(tab[i][j].getText()) && lastI != i && !tab[lastI][lastJ].getText().equals("")){
confirm.setEnabled(false);
check = true;
break;
}
else{
confirm.setEnabled(true);
}
}
//scheck diagonally
i = 0;
j = 0;
if (lastJ == lastI) {
while (i<7 && j<7) {
if(tab[lastI][lastJ].getText().equals(tab[i][j].getText()) && lastI != i && !tab[lastI][lastJ].getText().equals("")){
confirm.setEnabled(false);
check = true;
break;
}
else if(i<8&& j<8){
i++;
j++;
}
else{
confirm.setEnabled(true);
}
}
}
//check diagonally
i = 0;
j = 7;
if (lastI + lastJ == 7) {
while (true){
if(tab[lastI][lastJ].getText().equals(tab[i][j].getText()) && lastI != i && lastJ != j && !tab[lastI][lastJ].getText().equals("")){
confirm.setEnabled(false);
check = true;
break;
}
else{
confirm.setEnabled(true);
}
if (i == 7 && j == 0){
break;
}
else{
i++;
j--;
}
}
}
}
lastI
和lastJ
是保存用户点击的最后一个按钮位置的变量,对于该按钮,我检查是否有重复。 confirm
按钮应该被禁用,它会对每个循环执行,但第一个for
循环。目前尚未使用Boolean
,因此它不会影响代码。