【问题标题】:Implement a 2-dim array using a row-major 1-dim array使用行优先的 1-dim 数组实现 2-dim 数组
【发布时间】:2014-10-13 17:22:37
【问题描述】:

使用 row-major 1-dim 数组实现 2-dim 数组 我到这里了,我不明白如何完成实现二维数组的代码,请帮助!

public class TwoDimArray {
int[] a = null;
public TwoDimArray(int r, int c){}
public int get(int i, int j) {}
public int[] getRow(int i) {}
public int[] getCol(int j) {}
}

【问题讨论】:

  • 给出一个样本数组输入和你想要的输出
  • 比如我们想让二维数组是4行x 5列,我们输入数据0,0 0,1 0,2 0,3 0,4 1,0 1,1 1,2 1,3 1,4 2,0 2,1 2,2 2,3 2,4 3,0 3,1 3,2 3,3 3,4,二维数组应该显示数字0,0 0,1 0,2 0,3 0,4 在第一行,1,0 1,1 1,2 1,3 1,4 在第二行,依此类推。 @安东尼

标签: java arrays class multidimensional-array implementation


【解决方案1】:

我不确定 row-major 是什么意思,但我假设这意味着元素按行定位在 1-dim 数组中(即第一个 c 元素形成第一行,下一个 @ 987654323@ 元素构成第二行,等等...)。

  1. 构造函数很简单——创建一个r*c元素数组。

  2. 获取 (i,j) 元素是一个数学问题 - 找到给定行索引 i 和列索引 j 的公式,计算 (i, j) 元素。提示 - 该公式涉及将请求行乘以列长度。

  3. 获取行数组很简单,因为 1-dim 数组的元素表示连续的单行。正如我之前提到的,第一个 c 元素是第一行,等等......

  4. 获取列数组需要找到每个 i 的 (i,j) 元素(当 j 为常数时)。

【讨论】:

  • 当二维数组被布置为元素的一维数组时,行优先意味着第一行元素首先出现在一维数组中,然后是第二行,然后是第三行,以此类推。列优先意味着二维数组的第一首先出现在一维数组中,然后是第二列,依此类推。 Fortran 使用列优先顺序排列其多维数组。在维基百科中查找Row-major order
  • @ajb 谢谢!在那种情况下,我的假设是正确的。
【解决方案2】:

这看起来像是家庭作业,所以我不会给你一个完整的答案,但这里有一些想法可以帮助你开始:

如果要表示一个 5x7 数组(5 行 7 列),则需要创建一个包含 35 个元素 (35 = 5 * 7) 的一维数组。

a 的前 7 个元素将是第 0 行;因此

  • get(0,0) 将访问 a[0]
  • get(0,1) 将访问 a[1]
  • get(0,2) 将访问 a[2]

等等。

第一行的 7 个元素之后是下一行的 7 个元素,之后的行是 7 个;这意味着

  • get(0,0) 将访问 a[0]
  • get(1,0) 将访问 a[7]
  • get(2,0) 将访问 a[14]

等等。我认为您应该能够弄清楚这种模式,从而对如何进行这项工作有一个很好的了解。

【讨论】:

  • 其实不是作业,是课本上的练习题,可惜没有类似的例子,难解。感谢您的帮助。
【解决方案3】:

除了 Eran 和 ajb 答案之外,您可以通过这种方式获取矩阵的行 (i) 和列 (j)

Columns = number of columns 
for (int i=0; i < oneDimension.length; i++)
        {
            int rowIndex = i / Columns;
            int columnIndex = i % Columns;
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-18
    • 2022-12-11
    • 2018-11-08
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    相关资源
    最近更新 更多