Java倒置数组

时间:2014-03-21 16:17:01

标签: java

我试图制作一个简单的TicTacToe游戏。

以下是协调的代码:

for(int i=0;i<3;i++){
    for(int j=0;j<3;j++){
        buttons[i][j] = new XOButton();
        // if((i + j) % 2 != 0){
            buttons[i][j].setText(i + "," +j);
        // }
        p.add(buttons[i][j]);
    }
}

目前,协调是从最底层开始的,如下所示:

0,0 0,1 0,2
1,0 1,1 1,2
2,0 2,1 2,2

但是,我希望它像这样从下到上:

2,0 2,1 2,2
1,0 1,1 1,2
0,0 0,1 0,2

我尝试通过改变循环中i和j的值来修复它:

for(int i=3;i>0;i--){
    for(int j=3;j>0;j--){
        buttons[i][j] = new XOButton();
        // if((i + j) % 2 != 0){
            buttons[i][j].setText(i + "," +j);
        // }
        p.add(buttons[i][j]);
    }
}

然而,它没有用。它说

Exception in thread 'main' java.lang.ArrayIndexOutOfBoundsException:

我试着想出这个问题的原因,是因为我必须在数组[3] [3]之前将数据添加到数组中吗?例如,array [0] [0] ~dray [2] [3]都必须首先用数据填充?

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:2)

您正在使用数组的boud之外的索引。 java中的数组索引从零到数组的长度减去一。

为了避免这种类型的问题你可以循环数组的大小 buttons.length-1 buttons [i] .length-1

for(int i=buttons.length-1;i>=0;i--){
    for(int j=buttons[i].length;j>=0;j--){
        buttons[i][j] = new XOButton();
        // if((i + j) % 2 != 0){
            buttons[i][j].setText(i + "," +j);
        // }
        p.add(buttons[i][j]);
    }
}

答案 1 :(得分:1)

for(int i=7;i>=0;i--){
   for(int j=0;j<8;j++){
       buttons[i][j] = new XOButton();
       // if((i + j) % 2 != 0){
           buttons[i][j].setText(i + "," +j);
       // }
       p.add(buttons[i][j]);
    } 
}

答案 2 :(得分:1)

显而易见的答案似乎是你从i = 8而不是i = 2开始。这意味着在循环的第一次传递时,i = 8和j = 8,而按钮[8] [8]显然是超出界限。

另外,你的休息条件应该是i> = 0,否则我永远不会等于0(并且你的数组的索引是从0到2)。

答案 3 :(得分:0)

你可能最好离开你的迭代器ij,并在设置坐标文本时做一些数学运算。数组在Java中的工作方式,你可以做很多事情来实际重构它们的存储方式,但你当然可以构建你的存储方式的心理形象。

for(int i=0;i<3;i++){
    for(int j=0;j<3;j++){
        buttons[i][j] = new XOButton();
        // if((i + j) % 2 != 0){
            buttons[i][j].setText((buttons.length - i) + "," + (buttons[i].length - j));
        // }
        p.add(buttons[i][j]);
    }
}

这应该让您的阵列设置好,这样他们就可以按照您描述的方式布置文本。请注意,我使用(buttons.length - i)(buttons[i].length - j)来“切换”坐标以倒计时。这只是避免在代码中使用未定义常量的技巧,但从技术上来说,您可以用3替换它们。