Логика в ваших 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);
}
}
Мне очень жаль, но я не вижу проблемы. Было ли ошибкой, что я начал делать это по столбцам (только белые части) вместо строк? –
Добавлен рабочий код. –
Я еще не пробовал код, но я боюсь, что это не рекурсивный код. Тем не менее, ваш код кажется «более чистым», чем мой смысл, что я собираюсь попробовать и сделать его рекурсивным. Я расскажу вам позже, как это получилось. Спасибо! –