Java - 在二维数组中插入混洗列表

时间:2016-07-04 23:30:09

标签: java arrays

如何将洗牌后的列表插入2D数组?

ArrayList<Integer> list = new ArrayList<Integer>();
for (int i=1; i<17; i++) {
    list.add(new Integer(i));
}
Collections.shuffle(list);

for (int c=0; c<16 ; c++) {
    String number;
    number = Integer.toString(list.get(c));
    for (int i=0; i<4; i++) {
        for(int j=0; j<4; j++) {
            JButton btnmix = new JButton();
            btnBotonMix[i][j] = btnmix;
            btnBotonMix[i][j].setText(number);

        }
    }
}

我得到了最后一次打印:

[0][0] 2                                         [0][0] 4                                       
[0][1] 2                                         [0][1] 16
[0][2] 2                                         [0][2] 12
[0][3] 2                                         [0][3] 6
[1][0] 2                                         [1][0] 11
[1][1] 2                                         [1][1] 7
[1][2] 2                                         [1][2] 3
[1][3] 2    What Im trying to acomplish ---->    [1][3] 14
[2][0] 2                                         [2][0] 5
[2][1] 2                                         [2][1] 15
[2][2] 2                                         [2][2] 9
[2][3] 2                                         [2][3] 10
[3][0] 2                                         [3][0] 13
[3][1] 2                                         [3][1] 1
[3][2] 2                                         [3][2] 8
[3][3] 2                                         [3][3] 2

但是当我在cicle中打印我的数字变量时,我的所有非重复洗牌列表都无序(因为它的意思是)

1 个答案:

答案 0 :(得分:2)

您需要将每个按钮设置16次,因为您的代码位于3 for循环中。外部for循环的每次迭代,按钮文本都设置为另一个数字,但迭代中的所有按钮都相同。所以它最终会成为上次迭代的数字。

请改为尝试:

int c = 0;

for (int i=0; i<4; i++) {
    for(int j=0; j<4; j++){
        String number = Integer.toString(list.get(c));
        c++;

        JButton btnmix = new JButton();
        btnBotonMix[i][j] = btnmix;
        btnBotonMix[i][j].setText(number);
    }
}