如何在Processing中将一组一维数组复制到二维数组?

时间:2013-09-20 23:34:39

标签: arrays processing multidimensional-array

我有这些字符串数组,我想将它们加载到数组数组中以便以后处理它们。

具体来说,这是我的代码:

leerHTMLs(String[] urls) {

 String[][] htmlsArr;

    for (int i = 0; i < urls.length; i++) {

      String [i][] htmlsArr = loadStrings(urls[i]);

    }  

}

我收到错误,因为“String htmlsArr [i] [] = loadStrings(urls [i]);” claearly不是初始化数组的正确方法,对吧?但是如何将这些一维数组移动到我的多维数组?

我已经尝试了其他的事情,除了用一个太大而不能倒数的数字初始化多维数组,但这似乎是在作弊。

1 个答案:

答案 0 :(得分:1)

好吧,你自己说了!这是一个数组阵列!这意味着什么时候

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在评论中的要求,更合适的方法是在其中一个阵列(外部或内部阵列)中使用list。当然,这是我自己的拙见,因为自从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可以尽可能多地添加到它们中,您可以随意添加和删除元素。所以上面的代码说的是你有一个尚未定义的String数组列表。然后,在读取您的网址的for循环中,您可以去:

a.add(loadStrings(urls[i]));

现在你的ArrayList中有一个新的String数组元素!