2014-01-12 3 views
0

в этом методе, я попытался установить row = 0, row = 1 row = 2 row = 3 row = 4, и результат всегда false. я думаю, что его что-то рассматривает initilization переменной в силе, но если я не инициализировать компилятор приходит с ошибкойметод всегда возвращает 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

За исключением отсутствующих «возвращений» и слегка измененных имен, это похоже на исходный код? – NPE

+0

Вы пропустили скобки в условном выражении. Я предполагаю, что оператор условия не выполняется, как ожидалось. –

+1

Могло быть много причин, почему функция не работает так, как ожидает OP, но скобки не являются одним из них. – NPE

0

Ваш код действителен (для значений от 0 до 2). Конечно, вам нужна декларация о возврате. Единственное, что может быть неправильным, - takequare [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 kinda noob – user3183162

Смежные вопросы