[英]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.