2012-08-22 85 views
0

我有一个二维数组,可以通过任何整数N动态创建。最初,我需要将数组中的所有值设置为表示“未初始化”的值,我使用数字“-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方法中,它应该将给定索引处的值更改为1D数组中的对应索引。例如:

[-1] [-1]

[-1] [-1]

将随后成为:

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

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

+1

关于你的最后一段:你用'id.length'在你的类中得到网格大小'N'。 – halex

+0

@halex哇谢谢,这正是我需要的全部 – Ci3

+0

我会让它成为答案,并希望你接受它:) – halex

回答

1

你在你的课中得到网格大小Nid.length

+0

我简直不敢相信它那么简单!再次感谢! – Ci3

2

林不知道如果这能帮助回答你的问题,但下面的算法是用于索引代表一个二维矩阵一个维矩阵:

colSize*row+col 

其中colSize是列的最大数量。

例如下面的矩阵:

3*1+3 = 6; 

所以,你应该能够:

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

所以访问行1列3(即6,其索引号可以通过发现用这个公式只用列数和行数填写你的1D矩阵

+0

谢谢本。我知道那么多,但是我的问题是像halex提到的那样获得网格大小。 – Ci3

0

你也可以做类似的东西,考虑N是给定参数构造函数:

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

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

变量的范围是所有类。如果你把它设置为公开的,你也可以用p.size来访问它,其中p是一个渗透实例

相关问题