Java多维数组-如何引用不同维度的长度

Java多维数组-如何引用不同维度的长度,java,arrays,matrix,multidimensional-array,Java,Arrays,Matrix,Multidimensional Array,我们在AP计算机科学A课上学习2D阵列,我有一个问题,我正在努力寻找清楚的答案。在某些情况下,当我谈论我的问题时,参差不齐的数组是不存在的,当我指行时,我指的是穿过的数组,当我指列时,我指的是矩阵中向上向下的数组 具有2行4列的矩阵示例: 0 0 0 0 0 0 0 0 我的问题是如何引用列长度和行长度。在我看过的一些在线资源中,它将行数描述为arr.length,列数描述为arr[0]。length(我知道可能是arr[1]。length,但由于我不是在谈论不规则的数组,所以我将使用0),在

我们在AP计算机科学A课上学习2D阵列,我有一个问题,我正在努力寻找清楚的答案。在某些情况下,当我谈论我的问题时,参差不齐的数组是不存在的,当我指行时,我指的是穿过的数组,当我指列时,我指的是矩阵中向上向下的数组

具有2行4列的矩阵示例:

0 0 0 0
0 0 0 0
我的问题是如何引用列长度和行长度。在我看过的一些在线资源中,它将行数描述为
arr.length
,列数描述为
arr[0]。length
(我知道可能是
arr[1]。length
,但由于我不是在谈论不规则的数组,所以我将使用0),在其他地方,它将行长描述为
arr[0].length

在我的测试中,我说列长度是
arr.length
,而正确答案是
arr[0]。length
,这被标记为不正确。我在网上看到了各种各样的答案,在我观看的讲座视频中也看到了这些答案,所以我想在这里澄清一下


编辑:我特别询问
arr.length
是否指列长度;我知道这是指行数。

您可以尝试以下方法:

public static void main(String[] args) {

    //Create two dimensional array
    int[][] exampleArray = new int[][] {new int[] { 1, 2, 3 }, new int[] { 1, 2, 3, 4}};

    System.out.println(exampleArray.length);    //Prints 2
    System.out.println(exampleArray[0].length); //Prints 3
    System.out.println(exampleArray[1].length); //Prints 4
}
int[][] chessBoard = new int[8][8];
chessBoard[1][0] = new Knight(Color.WHITE);
在上面的示例中,我创建了一个包含两行的二维数组,其中第一行包含数字1、2和3(3列),第二行包含数字1、2、3和4(4列)

如果运行代码,您将发现:

  • exampleArray.length打印行数
  • exampleArray[0]。length打印第一行的列数
  • exampleArray[1]。length打印第二行的列数

编辑:在您给我们的数组的具体示例中,列长度为2,arr.length(行数)也为2。但是,你不应该从中做出任何假设。这对于您作为示例提供的特定阵列是正确的。你不应该从中提取任何可以应用于其他地方的通用规则。使用arr.length时,指的是数组的行数。如果没有关于数组的更多信息,仅从该值得出关于其列的任何结论是不安全的。

因此,此处所指的数组是一个数组数组。此数组的维度是内容中的行数;那么数组中的每一个都是列数。所以你的分数在这件事上是正确的

在我的测试中,我说列长度是arr.length,而正确答案是
arr[0]。length

这是你的问题。Java语言规范没有提到“行”或“列”的概念。如果真是这样,那就太奇怪了。这是一种编程语言,它们的全部要点是它们是灵活的结构,世界就是你的牡蛎。编你喜欢的节目

这让我们了解了一个简单的事实:该语言提供了数组和维度语法(即使java不是真正的多维数组,它只是数组的数组)其他一切都由您来完成,尤其是行和列的概念

换句话说,
arr.length
是行长度,
arr[0]。length
是列长度?可以好吧,你告诉我。这是你的节目

你的老师在这里真的错了,大写W:不仅仅是他们记下了“
arr.length
是行”(因为这没有错。这也是不对的,这是一个根本性的误解——就像说:“那种感觉是金枪鱼”——这两个概念完全不相关),但最重要的是,他们甚至暗示存在这样一件事,这是在延续一个重大的愚蠢行为:以笼统的方式,对于所有java代码来说,说明dim1是行,dim2是列(或反之亦然)是有意义的

不过,如果说‘比如说,本尼,你错了——
arr.length
而不是列数’的目的是为了向你解释,它也不是行数:它是你想要它代表的任何东西。你也可能掩盖了其他部分,例如,如果问题的形状更像这样:

public static void main(String[] args) {

    //Create two dimensional array
    int[][] exampleArray = new int[][] {new int[] { 1, 2, 3 }, new int[] { 1, 2, 3, 4}};

    System.out.println(exampleArray.length);    //Prints 2
    System.out.println(exampleArray[0].length); //Prints 3
    System.out.println(exampleArray[1].length); //Prints 4
}
int[][] chessBoard = new int[8][8];
chessBoard[1][0] = new Knight(Color.WHITE);
在这个具体的例子中,假设假定对国际象棋规则有一定的了解是公平的(虽然有疑问,但我不负责教学),您可以安全地得出结论,
chessBoard.length
给出列数,
chessBoard[0]。length
行数;毕竟,第一行,第二列确实开始包含骑士,而第二行,第一列肯定没有(它持有一个棋子)

但这仅仅是
,因为无论是谁编写了这段国际象棋软件都是如此。他们本可以判定第一个“维度”是行,第二个是列,完全相同。它对与
棋盘
数组交互的几乎每一行代码都会产生明显的影响,但代码的有效性不会降低或提高,也不会降低或提高

TL;博士:要么是你对这个问题的观点判断错误,要么是你的老师在教学上说得完全不对

注:请注意,您的问题中绝对没有任何内容表明已制定了哪项法令:“第一维度”包含行,“第二维度”包含列,反之亦然。你的例子是:

0 0 0 0 
0 0 0 0
仍然没有任何意义。这就像给我看一张棋盘的图片,仍然无法解释哪个java数组维度映射到图片中的哪个维度。如果示例包含java代码,则不同的故事。这方面的另一个例子:

有问题吗