【问题标题】:Fill a Matrix (2d array) recursively in Java在Java中递归地填充矩阵(二维数组)
【发布时间】:2013-12-08 01:43:25
【问题描述】:

我有一个 Java 编程任务要做,在其中一个问题中,我必须在一个布尔二维数组(矩阵)中填充“假”。我使用以下两个循环来做到这一点:

// The length and width are given

boolean [][] matrix; 
matrix = new boolean [length][width];

int row;
int col;

for (row = 0; row < length; row++)
{
   for (col = 0; col < width; col++)
   {
      matrix[row][col] = false;
   }
} 

问题是我们刚刚开始递归章节,我想有没有办法做同样的事情,但这次只使用递归...... 谢谢!

【问题讨论】:

  • 有时递归不一定是正确的答案。你和你的导师谈过这个吗?

标签: java arrays recursion multidimensional-array


【解决方案1】:

你可以用递归来模仿嵌套循环结构:

public static void fillWithFalse(boolean[][] array, int row) {
    if (row < array.length) {
        fillWithFalse(array[row], 0);
        fillWithFalse(array, row + 1);
    }
}

public static void fillWithFalse(boolean[] array, int col) {
    if (col < array.length) {
        array[col] = false;
        fillWithFalse(array, col + 1);
    }
}

public static void fillWithFalse(boolean[][] array, int row, int col) {
    if (row < array.length) {
        if (col < array[row].length) {
            array[row][col] = false;
            fillWithFalse(array, row, col + 1);
        } else {
            fillWithFalse(array, row + 1, 0);
        }
    }
}

这是相同的逻辑。但是递归对于这种事情并不好,而且要用 false 填充数组,正确的解决方案是:

boolean[][] matrix = new boolean[length][width];

因为布尔数组将默认初始化为所有元素为假。如果该赋值实际上是用 false 填充布尔数组,那基本上可能是一个技巧问题,因为除了实例化数组之外不需要任何操作。

【讨论】:

  • 酷!这正是我所需要的!实际上我不知道布尔数组默认初始化为 false 作为所有元素。我今天学到了新东西!...非常感谢!
  • 不客气。他们确实是。所有实例变量和数组元素都使用默认值初始化。对象为空,布尔值为假,字符为空字符,数字类型为 0。
【解决方案2】:

嗯,不知道为什么有必要……但是……这是我的解决方案:

public static void insertFalse(boolean [][] arr,int row,int column)
{
    if(row == 0&&column==0)
        return ;
    arr[row][column] = false;
    if(column == 0)
          insertFalse(arr,row-1,arr[0].length-1);
    else
        insertFalse(arr, row, column-1);
}

【讨论】:

  • 由于退货条件,这实际上不起作用。如果将 false 更改为 true,您将看到 arr[0][0] 未更改。它可能看起来有效的原因是数组中的所有元素一开始都是错误的。它还假设所有数组的长度都相同,这在 Java 中是不需要的。
  • Radiodef,我用'true'填充了数组以检查它是否有效,关于你说的第二部分,我现在也学到了新东西,谢谢。
猜你喜欢
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
相关资源
最近更新 更多