2013-03-11 69 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