0

多次元配列に値を格納する際に問題があります。アイデアの主な概念は、user_decide と呼ばれる配列リストがあり、それを配列に変換することです。したがって、決定配列は [1, 45, 656, 8, 97, 897] のように見えますが、すべての行が同じ数の要素を持っているわけではありません。次に、この置換 [,] とスペースを分割し、各値を個別に 2D 配列に格納したいと思います。そのため、「,」で分割し、それぞれの値を別の位置に格納しようとしています。すべてがうまく印刷されているように見えます。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

data[i]Javaでは、内容をコピーする前に も割り当てる必要があります。

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 に答える