如何将我的byte []方法转换为arraylist []方法?

时间:2017-04-23 14:27:18

标签: java arraylist

int movedistance = 5; // Distance to move the board

@Override
public byte getLive(int x, int y) {
    return board[y][x];  // Arraylist board.get(y).get(x) ?
}

public void patternRight(){
        byte[][] testBoard = new byte[getHeight()][getWidth()];
        // testBoard = new Arraylist<> ? 
        for (int x = 0; x < getHeight(); x++) {
            for (int y = 0; y < getWidth(); y++){
                if (getLive(y, x) == 1) testBoard[x][y + movedistance] = 1;
            }
        }
}

我试图制作一种方法,将我的游戏模式转移到我的棋盘上(生命游戏)。这个移动方法我目前使用byte []。我想使用ArrayList完全相同的方法。

1 个答案:

答案 0 :(得分:0)

byte[][]替换List<List<Byte>>毫无意义,但这是如何做的。

首先,您的代码与数组索引的顺序不一致:

  • getLive()参数声明为x,y,但您可以使用if (getLive(y, x) == 1)调用它。
  • getLive(),您使用board[y][x],但之后使用testBoard[x][y + movedistance] = 1;
  • 但您也将getHeight()x一起使用,将getWidth()y一起使用,也许它(不小心?)&#34;加起来&#34;。

我假设该方法应始终为x,y,数组应为[y][x],而x为&#34;宽度为&#34;而y是&#34;身高&#34;。

此外,[y + movedistance]会导致ArrayIndexOutOfBoundsException,因为您的循环使用全范围的值。我假设你想要&#34;环绕&#34;溢出。

public byte getLive(int x, int y) {
    return board.get(y).get(x);
}

public void patternRight(){
    List<List<Byte>> testBoard = new ArrayList<>();
    for (int y = 0; y < getHeight(); y++) {
        List<Byte> row = new ArrayList<>();
        for (int x = 0; x < getWidth(); x++)
            row.add((byte) 0);
        testBoard.add(row);
    }
    for (int x = 0; x < getWidth(); x++) {
        for (int y = 0; y < getHeight(); y++) {
            if (getLive(x, y) == 1)
                testBoard.get((y + movedistance) % getHeight()).set(x, (byte) 1);
        }
    }
}