[英]printing 2D arraylist in spiral order indexOutOfBounds Exception
[英]Creating a Spiral Order Matrix using ArrayList of ArrayList
鑒於此問題,我正在嘗試生成螺旋矩陣:給定一個整數 n,生成一個方陣,其中以螺旋順序填充從 1 到 n 平方的元素。 例如,給定 n = 4,
我正在嘗試使用 ArrayList 的返回類型來生成矩陣。
我的問題是,每次開始生成時,它都會更新整個矩陣而不是每列每行,最終每行和每列都具有相同的值。
這是我的代碼:
public static ArrayList<ArrayList<Integer>> generateMatrix(int a) {
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
//to create place holder for each element at the start - 0
ArrayList<Integer> zero = new ArrayList<Integer>();
for (int i=0; i<a; i++) {
zero.add(0);
}
for (int i=0; i<a; i++) {
res.add(zero);
}
int numToAdd = 1;
int top = 0;
int bottom = a-1;
int left = 0;
int right = a-1;
while (numToAdd <= a*a) {
for (int i = left; i<= right; i++) {
res.get(top).set(i, numToAdd);
numToAdd++;
}
top++;
for (int i = top; i <= bottom; i++) {
res.get(i).set(right, numToAdd);
numToAdd++;
}
right--;
for (int i=right; i>=left; i--) {
res.get(bottom).set(i, numToAdd);
numToAdd++;
}
bottom--;
for(int i=bottom; i>= top; i--) {
res.get(i).set(left, numToAdd);
numToAdd++;
}
left++;
}
return res;
}
你的問題在這里:
//to create place holder for each element at the start - 0
ArrayList<Integer> zero = new ArrayList<Integer>();
...
for (int i=0; i<a; i++) {
res.add(zero);
}
基本上,您只創建了一個新的“行” ArrayList
,然后您向res
添加了相同的ArrayList
a
。 這意味着每個res.get(n)
只是指回同一個ArrayList
實例。 也就是說,您的所有“行”最終都是完全相同的ArrayList
。
您需要為每一行實例化一個新的ArrayList
,例如:
for (int i=0; i<a; i++) {
// for each row make a *new* arraylist
ArrayList<Integer> zero = new ArrayList<Integer>();
// initialize that arraylist
for (int j=0; j<a; j++) {
zero.add(0);
}
// then add it to the row
res.add(zero);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.