我有一个由任何整数N动态创建的2D数组。最初,我需要将数组中的所有值设置为一个值,表示它是“未初始化”,其中我使用数字“-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方法中,它应该将给定索引处的值更改为1D数组中的相应索引。例如:
[ - 1] [-1]
[ - 1] [-1]
然后会变成:
[0] [1] [2] [3]
不幸的是,由于这是家庭作业,我不确定如何共享网格大小“N”以便能够创建一个新的一维数组,其中索引为值。
答案 0 :(得分:2)
我不确定这是否有助于回答您的问题,但以下算法用于索引表示二维矩阵的一维矩阵:
colSize*row+col
其中colSize是最大列数。
例如以下矩阵:
[0, 1, 2, 3;
4, 5, 6, 7;
8, 9, 10, 11]
所以访问第1行col 3(即6是索引号,可以通过以下方式找到:
3*1+3 = 6;
因此,您应该能够使用此公式仅使用列数和行数填写您的1D矩阵。
答案 1 :(得分:1)
您的班级N
的网格尺寸为id.length
。
答案 2 :(得分:0)
考虑到N是构造函数的给定参数,你也可以做类似的事情:
public class Percolation {
private int size;
//...
public Percolation(int N){
size = N;
//...
}
}
变量的范围是你的所有类。如果将其设置为公共,则还可以使用p.size访问它,其中p是Percolation的实例