自动生成循环内的数组

时间:2012-02-11 20:00:45

标签: java arrays automation

编辑:这是一系列1d阵列是必要的。可以使用2d Arrays / Arraylists,但最终结果必须是一系列1d Arrays。把它放到2d结构中会让我遇到同样的问题。 (将2d数组/列表的每一行转换为最初命名的单独数组(理想情况下,在某些字符串之后是连续的整数,例如Arr0,Arr1 ......,如示例所示)。

我正在寻找自动生成数组的代码(相同类型; int [])

以下代码希望能够展示我想要实现的目标:

for(int i=0; i<1000; i++) {
    int[] Arr"i" = new int[(200)];
    for(int j=0; j<200; j++) {
        Arr"i"[j] = j;
    }
}

所以最后我会有1000个名为Arr0,Arr1,Arr2 ...... Arr999的数组,每个数组都会在相应的索引中填充0-199的值。

(他们都会有不同的数据,这只是一个显示我的问题的简单例子。)

有没有办法做到这一点?我对java仍然相当新,似乎任何可行的解决方案都可以解决这个问题。

感谢您的帮助

5 个答案:

答案 0 :(得分:3)

听起来你真正需要的是Map

Map<String, int[]> map = new HashMap<String, int[]>();

for(int i=0; i<1000; i++) {
    int[] arr = new int[200];
    for(int j=0; j<200; j++) {
        arr[j] = j;
    }
    map.put("Arr" + i, arr);
}

要访问值(在本例中为int -arrays),请使用map.get(<key>),例如map.get("Arr10")

答案 1 :(得分:2)

这里最好的事情可能是ArrayList int[]。然后你可以随时添加一个新的。

看起来像这样:

ArrayList<int[]> arrs = new ArrayList<int[]>();
for(int i = 0; i < 1000; i++) {
  arrs.add(new int[200]);
  for(int j = 0; j < 200; j++) {
    arrs.get(i)[j] = j;
  }
}

Here is a reference for ArrayList

答案 2 :(得分:2)

在Java中,无法在运行时创建这样的新变量。它们必须在编译期间预先命名。所以,你不能完全采用你开始的方法。话虽这么说,你当然有正确的想法 - 在每个插槽中创建一个由数组组成的数组。

正如其他人所说,你要找的是一个二维数组。换句话说,你正在寻找一个数组阵列。您可以将一维数组想象为一组单独的插槽,每个插槽都可以在其中存储单个值。 2D数组是每个单独的插槽中包含另一个数组的地方。

访问每个数组就像迭代数组中的每个值一样简单,然后迭代遍历该子数组的每个值。换句话说:

  1. 在第i个插槽中分配一个新数组(具有该数组的适当大小)
  2. 创建for循环(从0到&gt;大小的新数组)
  3. 通过第j个值(Arr [i] [k] = x)将新值添加到第i个
  4. A more detailed explanation can be found here提供了一个非常有用的图像来描述数组的数组,以及一些代码示例。

    阅读您的编辑,听起来您希望将这些命名为单独的1维数组。虽然不可能在运行时命名新变量,但您可以将2D数组中的每个数组视为单独的行。

    我的建议是看看你是否可以重构你的代码以获得一个接受一维数组的方法并做你需要的任何处理。

    首先,处理1D数组的方法:

    /**
     * Prints each value x^2 in the given row
     */
    private static void processRow(int[] row) {
        for (int x : row) {
            System.out.println("x^2 = " + (x*x));
        }
    }
    

    准备好后,您可以处理2D数组中的单个行,如下所示:

    public static void main(String[] args) {
        int[][] table = new int[10][10];
    
        // Allocate table with real values
    
        for (int[] row : table) {
            processRow(row);
        }
    }
    

答案 3 :(得分:0)

您将要使用二维数组。

您可以像这样创建一个二维数组:

int[][] arr = new int[1000][200];
// iterates over the 1000 of first dimension
for(int i = 0; i < arr.length; i++) {

    // iterates over the 200 of the second dimension
    for(int j = 0; j < arr[i].length; j++) {
        // insert values into array here
    }
}

答案 4 :(得分:0)

这是一种与目前大多数答案不同的方法。您可以使用脚本(如Bash)生成您要查找的Java文件。我写得很快,完全符合你的需要:

#!/bin/bash

file="./ArrayGen.java";

echo "public class ArrayGen {" >> $file;

echo "public static void main(String[] args) {" >> $file;

for a in {0..999}
do

    echo "int[] arr$a = new int[200];" >> $file;

done

echo "} }" >> $file;

exit 0;