即使我输入有效值,方法也始终返回false

时间:2014-01-12 15:11:54

标签: 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;
        }
   } 

3 个答案:

答案 0 :(得分:0)

似乎你的病情从未被评估

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;
}

可能会有所帮助。

答案 1 :(得分:0)

您的代码有效(对于0到2之间的值)。当然,您需要一份退货声明。唯一可能出错的是takeSquare [row] [col] == false。这是一个布尔值数组吗?

答案 2 :(得分:0)

这不是答案,而是我的评论的扩展,提示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;
  }
}