繁体   English   中英

如何将2D数组转换为以值作为索引的1D数组?

[英]How to convert a 2D array to 1D array with the value as the index?

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

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”以能够创建一个以索引为值的新一维数组。

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

colSize*row+col

其中colSize是最大列数。

例如以下矩阵:

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

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

3*1+3 = 6;

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

您将在类中使用id.length获得网格大小N

考虑到N是构造函数的给定参数,您也可以做类似的事情:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM