Java:在2D Array中存储值

时间:2013-02-13 16:49:28

标签: java arrays multidimensional-array

我在多维数组中存储值时遇到问题。这个想法的主要概念是我有一个名为user_decide的arraylist,我将其转换为数组。因此,decision数组看起来像[1,45,656,8,97,897],但是所有行都没有相同数量的元素。然后,我将这个替换[,]和空格分开,我想将每个值分别存储在2D数组中。因此,我将其与“,”分开,并尝试将每个值存储在不同的位置。一切似乎打印得很好,即使剪切[j]是我想要存储的东西,但是我得到了一个java.lang.NullPointerException,我没有得到。 count变量实际上是count = user_decide.size()

String [] decide = user_decide.toArray(new String[user_decide.size()]);
for (int i = 0; i < count; i ++){
   decide[i] =
      decide[i].replaceAll("\\s", "").replaceAll("\\[","").replaceAll("\\]", "");
}
String [][] data1 = new String[count][];
for (int i = 0; i < count; i++){
   String [] cut = decide[i].split("\\,");
   for (int j = 0; j < cut.length; j++){
      System.out.println(cut[j]);
      data1[i][j] = cut[j];
   }
}

另一个问题是为什么我不能将它存储在Int [] []数组中?有没有办法做到这一点?

非常感谢你。

**编辑**

在我接受了这个问题后,我刚刚对我的回答进行了编辑。我试图将它存储在2D int数组中。

String [][] data1 = new String[user_decide.size()][];
int [][] data = new int [user_decide.size()][];

for (int i = 0; i < user_decide.size(); i++){
    data1[i] = decide[i].split("\\,");
    for (int j = 0; j < data1[i].length; j++) {
        data[i] = new int [data1[i].length]; 
        data[i][j] = Integer.parseInt(data1[i][j]);
        System.out.println(data1[i][j]);
    }
}

2 个答案:

答案 0 :(得分:2)

在java中,您需要在复制内容之前分配data[i]

for (int i = 0; i < count; i++){
  data1[i] = new String[cut.length];
  String [] cut = decide[i].split("\\,");
    for (int j = 0; j < cut.length; j++){
      System.out.println(cut[j]);
      data1[i][j] = cut[j];
    }
}

在复制内容之前:

答案 1 :(得分:2)

Ivaylo Strandjev的回答显示了你的问题的原因。但是有一个更简单的解决方案:

String [][] data1 = new String[count][];
for (int i = 0; i < count; i++){
  data1[i] = decide[i].split("\\,");
  System.out.println(Arrays.toString(data1[i]));
}

此外,您无需转义逗号。

修改

看到你的编辑。有一个很大的错误,请参阅我的代码中的评论:

String [][] data1 = new String[user_decide.size()][];
int [][] data = new int [user_decide.size()][];

for (int i = 0; i < user_decide.size(); i++){
    data1[i] = decide[i].split("\\,");
    for (int j = 0; j < data1[i].length; j++) {
        data[i] = new int [data1[i].length]; // This line has to be prior to the
        // inner loop, or else you'll overwrite everything but the last number.
        data[i][j] = Integer.parseInt(data1[i][j]);
        System.out.println(data1[i][j]);
    }
}

如果您想要的只是int[],我就会这样做:

int [][] data = new int [user_decide.size()][];

for (int i = 0; i < user_decide.size(); i++){
    String[] temp = decide[i].split(",");
    data[i] = new int [temp.length];
    for (int j = 0; j < temp.length; j++){
        data[i][j] = Integer.parseInt(temp[j]);
        System.out.println(data1[i][j]);
    }
}

可能有更好的方法,但我不知道为什么你在条件中使用user_decide.size()(一个Collection),在循环中使用decide[i](一个数组)。我没有理由把它混合起来,因为它可能导致错误。