0

我有一个由任何整数 N 动态创建的 2D 数组。最初,我需要将数组中的所有值设置为表示它“未初始化”的值,其中我使用数字“-1”。但是,我想将此二维数组转换为一维数组并将每个值分配为等于其在新一维数组中的索引。

public class Percolation {

private int[][] id;
private int[] array1D;
private int blocked = -1;   //a number that doesn't exist in the array

// create N-by-N grid, with all sites blocked
public Percolation(int N){

    id = new int[N][N];
    for (int k = 0; k < N; k++)
    { for (int i = 0; i < N; i++) id[k][i] = blocked; } 
}


// open site (row i, column j) if it is not already
public void open(int i, int j){


}

在 open 方法中,它应该将给定索引处的值更改为一维数组中的相应索引。例如:

[-1] [-1]

[-1] [-1]

然后会变成:

[0] [1] [2] [3]

不幸的是,由于这是家庭作业,我不确定如何共享网格大小“N”以便能够创建一个以索引为值的新一维数组。

4

3 回答 3

2

我不确定这是否有助于回答您的问题,但以下算法用于索引表示二维矩阵的一维矩阵:

colSize*row+col

其中 colSize 是最大列数。

例如下面的矩阵:

 [0, 1, 2, 3;
  4, 5, 6, 7;
  8, 9, 10, 11]

所以要访问第 1 行第 3 列(即 6,它是索引号,可以通过以下方式找到:

3*1+3 = 6;

因此,您应该能够使用此公式仅用列数和行数填写一维矩阵。

于 2012-08-22T05:23:54.017 回答
1

您可以N在班级中使用id.length.

于 2012-08-22T05:26:24.783 回答
0

考虑到 N 是构造函数的给定参数,您也可以这样做:

public class Percolation {
     private int size;
     //...

    public Percolation(int N){
         size = N;
         //...    
    }
}

变量的范围是你的所有类。如果您将其设置为公开,您还可以使用 p.size 访问它,其中 p 是 Percolation 的一个实例

于 2012-09-08T02:56:47.453 回答