如何使用一维矩阵实现二维矩阵

时间:2020-02-04 18:11:55

标签: java arrays

我将在一个月内进行第一次Java考试,并且需要有关课堂练习中的一项的帮助。

要解决的问题如下(我希望它仍然有意义,因为我只是将其从德语翻译成英语):

在Matrix2D类中,借助于称为“元素”的一维int []实现二维int矩阵。

实施以下方法:

Matrix2D(int numRows,int numColumns)->具有给定大小的Matrix2D的构造方法。

void set(int行,int列,int值)->将int值保存在矩阵的正确位置(行,列)

int get(int row,int column)->返回位置(行,列)的值

这就是问题所在。我们的讲师为我们提供了该问题的“解决方案”,但实际上我并没有对此有所了解。

“解决方案”如下所示:

Solution

有人可以帮助我更好地理解这一点吗?

2 个答案:

答案 0 :(得分:0)

这是一个视觉示例,可能会有所帮助。假设您的2D数组深2行,宽3列。我已经用它表示的2d数组的索引(假定从零开始的偏移量)标记了2D数组及其1D表示中的每个元素。因此,您只是获取2D阵列的每一行并“展平”它。基于示例中的getOffset()函数,因此getOffset(1,2)映射到的一维索引

index =  1*3 + 2 = 5

enter image description here

答案 1 :(得分:0)

解决方案非常简单。因此,代码没有创建二维矩阵,而是将数据保存为单个数组。和我在一起,我会解释:

想象一下现在4 * 5的2d矩阵仔细了解4 * 5的含义。这意味着我有4个数组的集合,每个数组的大小为5。 所以如果matrx是

int[][] matrix = {{1,2,3,4,5}
                  {6,7,8,9,10},
                  {11,12,13,14,15},
                  {16,17,18,19,20};

您可以在此处看到其4行和5列。现在考虑一下,您提取每个数组,合并它们并排放置。看起来如何?

int[] matrix = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,29};

但是我们怎么做的就是索引都是错误的。现在注意,如果您具有访问矩阵[2] [3],这是什么意思。简而言之,我想访问第三个数组(索引为0,所以0,1,2,3),在第三个数组中,我想要第四个值(索引为0,所以0,1,2,3)。那么我们该怎么做

public int get offset(int row,int column){
  /*skip the 0th and 1st array and than go to the 4th element*/
  /*understand columnSize as number of elements in each array that we need to skip*/

  int skippingPart = row*columnSize;
  int newIndex = skippingPart+column;
  return newIndex;
}

所以2d数组中的matrix [2] [3]变成array [13](我们跳过了前两个元素,所以10个元素(0-9)比我们再添加4个元素得到13))