【问题标题】:creating 2D arrays in Java doesn't make sense在 Java 中创建二维数组没有意义
【发布时间】:2017-09-28 12:16:03
【问题描述】:

如果new int[5]创建一个长度为5的int数组,new String[5]创建一个长度为5的String数组,

那么按照这个逻辑,new int[3][4] 不应该创建一个长度为 4 的 int[3] 数组,例如 {{1,2,3}, {1,2,3}, {1,2,3}, {1,2,3}}?

【问题讨论】:

  • 您的意思是三个数组,每个数组长度为 4?此外,默认值为0
  • 据我所知,在所有编程语言中,对于一个二维数组,第一个索引代表数组的长度,第二个索引代表每个子数组的长度
  • 所以它只会创建三个长度为四的数组,而不是四个长度为三的数组
  • 我相信他在问为什么arr[j][k] 创建j 长度为k 的数组,而不是k 长度为j 的数组。为什么arr[j][k] 不等于(arr[j])[k]?当 column-row 在语言上下文中看起来更直观时,为什么要切换到 row-column 实现?

标签: java arrays multidimensional-array


【解决方案1】:

正如 phasma 所说,这个问题似乎是在问为什么 java 在数组创建期间切换到“列优先”并返回到“行优先”进行访问。似乎 Java 中的多维数组是使用反向直觉分配的,但随后使用“正确”直觉进行访问。

int[][] 应该表示int 的数组数组,对吧?确实如此!所以在创建数组时,你可能会这样想:int[][] arr = new (int[3])[4]。因为它应该是一个包含大小为 3 的数组的大小为 4 的数组!

但是,如果您要使用这种直觉,则必须像这样访问数组:(arr[0-3])[0-2] 而不是像您创建数组那样的(arr[0-2])[0-3],并且顺序将被切换并且会更加混乱并且难以调试。

我相信大多数语言这样做的原因是为了保持一致并防止混淆。你这样想很聪明,因为大多数人都不会注意到。

【讨论】:

    猜你喜欢
    • 2012-12-06
    • 1970-01-01
    • 2012-08-27
    • 2021-03-16
    • 2013-11-22
    • 2016-01-08
    • 2011-02-12
    • 1970-01-01
    相关资源
    最近更新 更多