2014-01-12 60 views
0

在此方法中,我嘗試設置row = 0,row = 1 row = 2 row = 3 row = 4,並且結果始終爲false,但方法始終返回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; 
     } 
    } 
+0

什麼'col'? – Maroun

+6

您顯示的代碼不會嘗試返回任何內容。 – NPE

+1

我假設你有一個'return valid;'在最後,對吧? – dasblinkenlight

回答

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

評價可能是這會幫幫我。

+0

除了缺少'return'和稍微更改的名稱外,這與原始代碼看起來相同? – NPE

+0

您在條件語句中遺漏了括號。我的猜測是條件語句沒有按預期執行 – 2014-01-12 15:22:37

+1

可能有很多理由說明爲什麼函數不按OP方式工作,但括號不是其中之一。 – NPE

0

您的代碼有效(對於0到2的值)。當然,你需要一個返回聲明。唯一可能出錯的是採用Square [row] [col] == false。這是一個布爾值數組嗎?

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

我可以通過電子郵件給你私下給你提供我的整個代碼嗎? – user3183162

+0

@ user3183162您需要學習基本的調試技巧,包括簡化代碼並使用調試或打印語句來定位錯誤。有關一些想法,請參閱[我的調試筆記](http://patriciashanahan.com/debug/index.html)。 –

+0

我在cs..im的第一學期有點noob – user3183162

相關問題