2013-03-11 92 views
1

目前我有一個arrayList包含幾個值對。我試圖以矩陣格式打印它們,如下例所示。每個奇數都是矩陣中的位置,下面的數字就是數值。該位置與計數器一樣增加,如果該數字不存在於數組中,則將0置於該位置。有點棘手的解釋。Arraylist對比較?

arraylist contains (1, 10, 2, 90, 4, 9, 7, 2, 11, 4, 14, 45) 

輸出:

0 10 90 0 
9 0 0 2 
0 0 0 4 
0 0 45 0 

我已經試過:

int position, value; 
int size = 16; 

for (int i = 0 ; i < size ; i += 2) { 
    position = matrix.get(i); 

    if(position == i){ 
     value = matrix.get(i+1); 
     System.out.print(value); 
    } else { 
     System.out.print("0"); 

     } 

} 
+1

爲什麼要使用'List',如果你已經在這裏解決了這個問題:[LinkedHashMap打印格式?](http://stackoverflow.com/questions/15314932/linkedhashmap-printing-formatted) – jlordo 2013-03-11 23:05:53

+0

這是爲了一個項目,在這個項目中,我認爲使用linkedHashMap更好,但是由於發現這不是一個選項,我必須用arrayList來完成。 LinkedHashMap是完美的! – user2152251 2013-03-11 23:07:54

回答

0

可以超過1在for循環,例如增加

for(int i = 0, size = matrix.size(); i < size ; i = i+2) 
{ 
    ... 
} 
+0

我已經設法解決了我放入OP中的新代碼,但現在我得到了一個越​​界異常,因爲矩陣只有10個值,我需要將它循環到16? – user2152251 2013-03-12 11:58:32

+0

@ user2152251。通過使用硬編號碼,您可以獲得所要求的內容。我改變了我的例子初始化'size'變量爲一個實際的矩陣尺寸。 – 2013-03-12 13:52:59

+0

我不確定你是否誤解了。大小應該是矩陣的整體大小,數組中的每個奇數都是下列值的位置,正如我在示例中所述的那樣?如果該位置不在數組中,則在其中放置一個0。但我似乎無法適應「position = matrix.get(i);」任何地方它不會拋出異常 – user2152251 2013-03-12 15:42:28

1

你想讀數組中的數字不是一個接一個,而是兩個接一個。試試這個(這是不夠的,解決你的問題,但是這將幫助):

for (int i = 0 ; i < size ; i += 2) { 
    int position = matrix.get(i); 
    int value = matrix.get(i+1); 

    ... // Deal with them 
} 

要真正用正確的值填充矩陣,你應該使用Map<Integer, Integer>

+0

乾杯,我現在看起來存在的問題是,視爲位置值只能達到10(arrayList中只有10),當我超過10時,它會出現超出界限的異常。我無法將它移到循環外面,因爲每當循環進行時它都需要更改。 – user2152251 2013-03-11 23:25:03