即使我输入了有效的值,方法也总是返回false

  • 本文关键字:方法 false 返回 有效 java
  • 更新时间 :
  • 英文 :


在这个方法中,我尝试设置row=0,row=1 row=2 row=3 row=4,结果总是false。我认为考虑到变量的初始化是有效的,但如果我不初始化,编译器会出现错误

public static boolean isValidMove(int row,int col){
boolean valid=false;
if(row>=0&&row<3&&col>=0&&col<3){
if (takenSquare[row][col]==false) {
valid= true;
}
} 

您的病情似乎从未在中进行过评估

public static boolean isValidMove( int nRow,int nCol ) {
boolean blValid = false;
if( ( nRow >= 0 && nRow < 3 ) && ( nCol >= 0 && nCol < 3 ) ) {
if ( arTakenSquare[ nRow ][ nCol ] == false ) {
blValid = true;
}
}
return blValid;
}

也许这会有所帮助。

您的代码是有效的(对于0到2之间的值)。你当然需要一份报税表。唯一可能出错的是takenSquare[row][col]==false。这是一个布尔值数组吗?

这不是一个答案,而是我建议SSCCE的评论的扩展。我已经从问题中提取了代码,并将其封装在一个简单的测试程序中。为了完成isValidMove方法,我添加了一个返回valid和一个}

它打印row=0, col=0: true。这证实了问题中引用的代码中不存在错误。

下一步是OP修改它,直到它再现问题,或者简化OP程序的其余部分,直到它大约有这么长。无论哪种方式,目标都是一个简短、简单的程序,用于编译、运行和演示问题。通常,尝试写这样的东西会导致错误。如果没有,发布SSCCE肯定会得到一个有用的答案。

public class Test
{
private static boolean[][] takenSquare = new boolean[3][3];
public static void main(String[] args) {
System.out.println("row=0, col=0: "+isValidMove(0,0));
}
public static boolean isValidMove(int row, int col) {
boolean valid = false;
if (row >= 0 && row < 3 && col >= 0 && col < 3) {
if (takenSquare[row][col] == false) {
valid = true;
}
}
return valid;
}
}

=============================================

这是我的测试程序的修订版,演示了对isValidMove的检测,这样就可以清楚地知道它通过了什么参数,返回了什么,以及为什么它在任何时候都返回false

public class Test
{
private static boolean[][] takenSquare = new boolean[3][3];
public static void main(String[] args) {
takenSquare[1][1] = true;
test(0,0);
test(0,-1);
test(1,1);
}
private static void test(int row, int col){
System.out.println("Test result: row="+row+", col="+col+", valid="+isValidMove(row, col));
}
public static boolean isValidMove(int row, int col) {
boolean valid = false;
if (row >= 0 && row < 3 && col >= 0 && col < 3) {
if (takenSquare[row][col] == false) {
valid = true;
} else {
System.out.println("isValidMove square already taken for row="+row+", col="+col);
}
} else {
System.out.println("isValidMove out of range argument row="+row+" col="+col);
}
System.out.println("Returning "+valid+" from isValidMove("+row+","+col+")");
return valid;
}
}

最新更新