对于我正在做的项目,我希望能够创建一个多维数组,如下所示:
private static String[][] docArray = new String[6][];
对于那个数组,我建立了类似的东西:
docArray[0].equals(headingValue);
.
.
.
docArray[5].equals(anotherValue);
然后说我想做一些像索引3指向子数组的东西,逻辑上我认为你会做类似下面的事情(虽然我知道这不是正确的语法)......
docArray[3][1] = new String[6][];
到目前为止,我的逻辑是否正确,如何继续添加指向新数组的指针?提前感谢您的帮助。
答案 0 :(得分:4)
问题是如果docArray
是String[][]
,那么docArray[3][1]
应该是String
,而不是String[][]
。
这样可以让你做你想做的事情,因为每个docArray
都是Object[][]
而且锯齿状的String
数组也是 Object
。
答案 1 :(得分:1)
因为docArray[3]
也是一个数组,你可以做....
docArray[3] = new string[4]; //4 for example
如果内存正确,则称为锯齿状数组。
答案 2 :(得分:1)
我认为您正在寻找的是以下语法:
String[][] s2d = new String[3][]; // creates a 2-Dimensional Array with 3 rows (or columns, depending on how you index/address
s2d[0] = new String[4] // creates a new 1-Dimensional Array with 4 columns (at row 0)
s2d[1] = new String[26] // creates a new 1-Dimensional Array with 26 columns (at row 1)
s2d[0][0] = "This is a cell at row 0, column 0"
答案 3 :(得分:1)
我认为这里的关键概念是,无论你如何声明它,在Java中,任何东西的数组都只是一个普通的对象,定义为给定类型的一系列元素,因此对象数组可以包含其他阵列。
JVM中不支持以多种方式处理多维数组。所以只有两种类型的数组:
F []数组,其中F是基本类型(int,float等) O []数组,其中O是任何其他类型 - 包括数组(O = F [],或O = O'[])
所以,对于你的问题,你可以制作阵列数组,什么都不会阻止你。只是意识到你只是访问一维对象引用数组。
语法((array [i] [j])[m] [n])与(((((array [a])[b]))[c])[d])<没有区别/ p>
通过阅读您的问题和之前的答案,我会提供以下建议:保持尽可能强的类型,因为您只能在深入研究多维数组时丢弃输入信息,您永远不能添加它。在一个简单的表单中,您可以使用多种简单类型来表示您的文档:
class Line extends ArrayList<String> {}
class Paragraph extends ArrayList<String> { public Line[] getLines(); }
class TextParagraph extends Paragraph {}
class QuotedParagraph extends Paragraph {}
class HeadingParagraph extends Paragraph {}
class Document { public static void main (String[] args) {
Paragraph[] multiDiDoc = new Paragraph[10];
multiDiDoc[0] = new HeadingParagraph();
} }
使用对象模型,您可以保留通用性('HeadingParagraph','QuotedParagraph','TextParagraph'类型)和支持特异性(不允许使用Object类型的任意对象)。
如果您坚持使用原始对象,随着您的客户端应用程序变得越来越大,您将越来越多地想知道您是否会遇到类强制转换异常。