我将在一个月内进行第一次Java考试,并且需要有关课堂练习中的一项的帮助。
在Matrix2D类中,借助于称为“元素”的一维int []实现二维int矩阵。
实施以下方法:
Matrix2D(int numRows,int numColumns)->具有给定大小的Matrix2D的构造方法。
void set(int行,int列,int值)->将int值保存在矩阵的正确位置(行,列)
int get(int row,int column)->返回位置(行,列)的值
这就是问题所在。我们的讲师为我们提供了该问题的“解决方案”,但实际上我并没有对此有所了解。
有人可以帮助我更好地理解这一点吗?
答案 0 :(得分:0)
这是一个视觉示例,可能会有所帮助。假设您的2D数组深2行,宽3列。我已经用它表示的2d数组的索引(假定从零开始的偏移量)标记了2D数组及其1D表示中的每个元素。因此,您只是获取2D阵列的每一行并“展平”它。基于示例中的getOffset()函数,因此getOffset(1,2)映射到的一维索引
index = 1*3 + 2 = 5
答案 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))