2016-04-22 2 views
0

Я пытаюсь сделать план действий с рекурсивными. Я уже сделал многомерный массив (8x8). Теперь единственная проблема, с которой я сталкиваюсь, - это разместить кусочки в правильном месте (особенно черные). В чем моя проблема? когда я пытаюсь напечатать первый ряд фрагментов, он печатает что-то вроде этого: "-b-b-b-b-b--", а не "-bbbbbb-". Это также верно для последней строки.Линии действий с рекурсивным

public static void im (int[][]m, int r, int c){//Matriz 
    if (r==m.length-1 && c==m[0].length-1) { 
     System.out.print("-"); 
    } else { 
     if(r==0 && c>0 && c<m[0].length-1){ 
      System.out.print("b"); 
     } 
     if(c==0 && r>0 && r<m.length-1){ 
      System.out.print("w"); 
     } 
     if (c==m[0].length-1) { 
      if(r>0){ 
       System.out.print("w"); 
       System.out.println(""); 
       im(m,r+1,0); 
      }else{ 
       System.out.print("-"); 
       System.out.println(""); 
       im(m,r+1,0); 
      } 
     } else { 
      System.out.print("-"); 
      im(m,r,c+1); 
     } 
    } 
} 

ответ

0

Логика в ваших if-утверждений является ошибочным, вы могли бы попробовать снова и комментарии в каждом блоке, что вы знаете, в настоящее время ДО. Как это:

if (a) { 
    // I know that a == true 
    if (b) { 
     // I know that a == true && b == true 
    } else { 
     // I know that a == true && b == false 
    } 
} 

Таким образом, вы можете легко определить ошибки самостоятельно, если это не поможет просто комментарий, и я отвечу на правильный код.

EDIT: Вот правильный код:

if (r == 0 || r == m[0].length - 1) { 
    // top or bottom row 
    if (c == 0 || c == m.length - 1) { 
     // top or bottom row and leftmost column or rightmost column 
     System.out.print("-"); 
    } else { 
     // top or bottom row and not leftmost column or rightmost column 
     System.out.print("b"); 
    } 
} else { 
    // not top or bottom row 
    if (c == 0 || c == m.length - 1) { 
     // not top or bottom row and leftmost column or rightmost column 
     System.out.print("w"); 
    } else { 
     // not top or bottom row and not leftmost column or rightmost column 
     System.out.print("-"); 
    } 
} 

Я не знаю, как исправить исходный код, так как он на самом деле не имеет смысла для меня, так что я просто полностью переписал , хорошо помнить, что вы хотите, чтобы каждый вызов функции выводил только 1 символ, поэтому, по крайней мере, попробуйте gaurantee, чтобы он мог достичь только одного из операторов печати за раз.

EDIT2:

public static void im(int[][] m, int r, int c) { 
    if (r == 0 || r == m.length - 1) { 
     // top or bottom row 
     if (c == 0 || c == m[0].length - 1) { 
      // top or bottom row and leftmost column or rightmost column 
      System.out.print("-"); 
     } else { 
      // top or bottom row and not leftmost column or rightmost column 
      System.out.print("b"); 
     } 
    } else { 
     // not top or bottom row 
     if (c == 0 || c == m[0].length - 1) { 
      // not top or bottom row and leftmost column or rightmost column 
      System.out.print("w"); 
     } else { 
      // not top or bottom row and not leftmost column or rightmost column 
      System.out.print("-"); 
     } 
    } 
    if (c == m[0].length - 1) { 
     // rightmost column 
     System.out.println(); 
     if (r != m.length - 1) { 
      // not bottom row 
      im(m, r + 1, 0); 
     } 
    } else { 
     // not rightmost column 
     im(m, r, c + 1); 
    } 
} 
+0

Мне очень жаль, но я не вижу проблемы. Было ли ошибкой, что я начал делать это по столбцам (только белые части) вместо строк? –

+0

Добавлен рабочий код. –

+0

Я еще не пробовал код, но я боюсь, что это не рекурсивный код. Тем не менее, ваш код кажется «более чистым», чем мой смысл, что я собираюсь попробовать и сделать его рекурсивным. Я расскажу вам позже, как это получилось. Спасибо! –

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