好吧,你自己说的!这是一个数组数组!这意味着当你这样做时
htmlsArr[i]
你将从这个数组数组中取回元素 i,当然是一个数组!当你这样做
htmlsArr[i][j]
你得到的是数组中的元素 j,它是名为 htmlsArr 的数组数组中的元素 i!最终代码应如下所示:
void leerHTMLs(String[] urls) {
String[][] htmlsArr;
htmlsArr = new String[urls.length][0];
for (int i = 0; i < urls.length; i++) {
htmlsArr[i] = loadStrings(urls[i]);
}
}
因此,由于 loadStrings() 返回一个字符串数组,因此您告诉处理获取输出并将其放入数组 htmlsArr 的元素 i 中(这当然是一个数组)。
从技术上讲,这不是做这种事情的正确方法,因为说
htmlsArr = new String[urls.length][0];
表示使用 urls.length 个元素创建一个数组,它们都应该是元素个数为 0 的数组。但是然后你用具有任意数量元素的数组的其他数组覆盖数组,特别是 loadStrings 可能给你的。
编辑:
根据 Shane 在评论中的要求,更合适的方法是在其中一个数组(外部或内部)中使用列表。那当然是我自己的拙见,因为由于 Processing(Java) 允许您这样做,您不妨认为它是正确的。问题是,当您说出以下内容时:
String [][] arr = new String[3][4];
你的意思本质上是一个像这样的矩形数组:
{{ "a","b","c","e" },
{ "p","y","f","n" },
{ "g","q","r","m" }}
即一个包含三个数组的数组,每个数组包含四个元素。仅出于直觉的原因,我认为这是一种“不正确”的方式。如果你的数组是这样的:
{{ "a","b","c","e","k","h","s" },
{ "p","y" },
{ "g","q","r","m" }}
new String[3][something]
尽管您始终可以在我的原始答案中使用拉伸,但无法以某种方式直观地定义它。(顺便说一句,您似乎也可以使用这样的空参数来定义它new String[3][]
:)
但是由于您要保留数组的第二维未定义,您不妨转向更适合“未知数量元素”工作的列表。由于您似乎无法创建列表数组,因此您必须像这样创建数组列表:
ArrayList<String []> a = new ArrayList<String []>();
如您所见,这里没有元素数量的定义。ArrayLists 可以添加尽可能多的元素,并且可以任意添加和删除元素。所以上面的代码说的是你有一个尚未定义的字符串数组列表。然后,在读取您的网址的 for 循环中,您可以执行以下操作:
a.add(loadStrings(urls[i]));
现在您的 ArrayList 中有一个新的 String 数组元素!