簡體   English   中英

Java:將值存儲在2D數組中

[英]Java: Storing values in 2D Array

我在多維數組中存儲值時遇到問題。 這個想法的主要概念是,我有一個名為user_decide的arraylist,並將其轉換為數組。 因此,decision數組看起來像[1,45,656,8,97,897],但是所有行的元素數都不相同。 然后,我將這個replace [,]和空格分開,我想將每個值分別存儲在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]);
    }
}

在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];
    }
}

復制內容之前:

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()中使用user_decide.size() (一個Collection)作為條件並decide[i] (一個數組)。 我沒有充分的理由考慮將其混合,因為這可能會導致錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM