0

我在将值存储在多维数组中时遇到问题。这个想法的主要概念是我有一个名为 user_decide 的数组列表,我将它转换为一个数组。所以,decision 数组看起来像 [1, 45, 656, 8, 97, 897],但所有行的元素数量都不相同。然后,我拆分了这个替换 [,] 和空格,我想将每个值单独存储在一个二维数组中。所以,我用“,”分割它,并尝试将每个值存储在不同的位置。一切似乎都打印得很好,甚至 cut[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]);
    }
}
4

2 回答 2

2

在 java 中,您还需要 allocate 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];
    }
}

复制内容前:

于 2013-02-13T16:51:31.937 回答
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()(集合)作为条件和decide[i](数组)。我没有充分的理由考虑混合它,因为它可能会导致错误。

于 2013-02-13T16:55:21.163 回答