-1

只是一个简单的问题 - 如果我像这样实例化一个新的二维 int 数组

int[][] input = new int[101][]; //number is irrelevant

eclipse 似乎不介意这一点,但我不完全确定这是否会像我期望的那样工作,即数组的第二部分将动态运行。

阅读您的答案后,我意识到我的问题措辞不当。

我正在从一个文件中读取 - 它是一个 CSV,有 101 列和 X 行。由于我正在逐行读取文件,因此我很容易发现我的“二维数组”的第一个维度是 101。但是,也因为我正在逐行读取文件,我不能肯定地说我的第二维将是 X 而不遍历整个文件。

我如何使用我当前的方法找到 X,或者这实际上是不可能的?

4

6 回答 6

2

然后你会有 101 个元素,input其中都是null. 要创建第二个维度,您需要为每个项目初始化它:

input[13] = new int[63];
input[14] = new int[128];

对于所有第一级项目,第二个维度不需要相同。如果你使用这个,第二个维度将是相同的:

int[][] input = new int[101][50];

然后将所有值初始化为0.

但真正的答案是:你为什么不试试?

于 2012-06-05T14:20:16.180 回答
0

我猜您正在寻找长度可变的第二维,在这种情况下,您不妨将其设为数组数组,从而使您能够定义每行的长度。

于 2012-06-05T14:21:03.730 回答
0

Java 仅支持锯齿数组,这意味着所有维度都不会自动初始化,但您必须自己初始化它们:

for (int i = 0; i < input.length; ++i)
    input[i] = new int[42]; // or anything else.
于 2012-06-05T14:21:55.570 回答
0

正如其他答案所指出的,Java 只有“锯齿状”数组——换句话说就是数组的数组。

int[][] input = new int[101][];

您的代码在这里所做的是创建一个 101 个元素的数组int[]。因为int[]Object,所以每个元素都被初始化为null。然后,您需要先设置每个int[]元素,然后才能使用它:

input[0] = new int[4];

一种快捷语法可以让您快速将内部数组全部初始化为一个大小:

int[][] input = new int[101][4];

这将创建一个 4 元素数组的 101 元素数组int(初始化为0)。

于 2012-06-05T14:24:47.350 回答
0

从技术上讲,Java 没有“二维”数组的概念。它所拥有的以及您编写的内容是一个数组数组 - 它允许您拥有锯齿状数组。

通过编写一些东西new int[3][],您基本上说我有一个数组数组,您可以将其概念化为[null,null,null]因为您还没有初始化任何实际的“内部”数组。此时您需要执行类似的操作

input[0] = new int[3]
input[1] = new int[3]
input[2] = new int[3]

然后您可以将其概念化为 [[0,0,0],[0,0,0],[0,0,0]]。

写作new int[3][3]实现了同样的目标。

于 2012-06-05T14:25:04.710 回答
0

Eclipse 不介意您没有初始化第二维。在您的方法中,您应该初始化每个子数组:int[1]、int[2] 等。

于 2012-06-05T14:25:49.967 回答