当前位置: 首页 > 知识库问答 >
问题:

索引5超出长度5的界限

濮金鑫
2023-03-14

我正在努力创造这个游戏https://en.wikipedia.org/wiki/Conway然而,每当我尝试使用printBoard方法时,我都会遇到以下错误

线程“main”java中出现异常。lang.ArrayIndexOutOfBoundsException:索引5超出长度5的界限。

我怎样才能解决这个问题?谢谢

public class Board {
    final int[][] board;
    final int width;
    final int height;

    public Board(int width, int height) {
        this.width = width;
        this.height = height;
        this.board = new int[width][height];
    }

    public void printBoard() {
        System.out.println("---");
        for (int i = 0; i < height; i++) {
            String line = "|";
            for (int j = 0; j < width; j++) {
                if (this.board[i][j] == 0) {
                    line += ".";
                } else {
                    line += "*";
                }
            }
            line += "|";
            System.out.println(line);
        }
        System.out.println("---\n");
    }

    public int countAliveNeighbours(int x, int y) {
        int count = 0;
        count+=this.board[x-1][y-1];
        count+=this.board[x][y-1];
        count+=this.board[x+1][y-1];
        count+=this.board[x+1][y];
        count+=this.board[x+1][y+1];
        count+=this.board[x][y+1];
        count+=this.board[x-1][y+1];
        count+=this.board[x-1][y];

        return count;
    }

    public void setAlive(int x, int y) {
        this.board[x][y] = 1;
    }

    public void setDead(int x, int y) {
        this.board[x][y] = 0;
    }

    public void setState(int x, int y) {
        if(this.board[x][y] == 1) {
            if(countAliveNeighbours(x,y) > 2) {
                setDead(x,y);
            } else if (countAliveNeighbours(x, y) == 2 || countAliveNeighbours(x, y) == 3) {
                setAlive(x,y);

            } else if (countAliveNeighbours(x,y) > 3) {
                setDead(x,y);
            }
        } else {
            if(countAliveNeighbours(x,y) == 3) {
                setAlive(x,y);
            }
        }

    }

    public void checkState() {
        for(int i=0;i<height;i++) {
            for(int j=0;j<width;j++) {
                setState(height, width);
            }
        }
    }

    public static void main(String[] args) {
        Board board = new Board(8,5);
        board.setAlive(2,2);
        board.setAlive(3,2);
        board.setAlive(4,2);

        board.printBoard();

    }
}

共有1个答案

颜畅
2023-03-14

董事会初始化是必要的

 this.board = new int[width][height];

做到:-

 this.board = new int[height][width];

或者改变你用宽度迭代高度的循环。

 类似资料:
  • 在此输入图像描述 这是我的代码,我试图解决它5个小时,但我没有得到什么问题,任何人都可以帮助。我也检查了资源,但代码与源代码相同,但它没有运行。

  • 我有一个方法,我输入一个包含4个对象的数组,它创建一个新的对象数组,复制之前的4个对象,然后再向数组中添加一个。但我一直有例外。

  • 目前,我得到了以下代码的错误。错误是索引4超出了长度4的范围。基本上,我想做的是返回第一个索引,其中数据没有按升序排序。如果对数据进行了排序,该函数将返回数组的长度。例如{10,20,90,5,70}将返回3(90) 我使用的测试用例如下: 任何帮助或线索都将不胜感激。

  • 更新:原来我不得不再次导出一个SVG,并把它放在我文件的数据文件夹中。 我再次面临一个编码问题。抱歉,如果格式不正确,我还需要改进我的编码问题的措辞方式。 ArrayIndexOutOfBoundsException:索引30超出长度30的界限意味着什么?我已经试着自己去查了,但似乎找不到它的意思。 起初,当我添加svg时,代码正常工作,然后我再次添加了同样的文件,也正常工作(Eye2、pupil

  • 我对编码还是个新手,所以请耐心听我说,我只是在尝试一些方法来洗牌一个数组,以便最终在我用Java创建的纸牌游戏中洗牌。我知道索引5超出了长度5的界限,但令我困惑的是错误并不总是弹出。有时我试着运行我的代码,它工作得很好,而另一些时候,即使我在运行代码期间没有更改任何内容,我也会出现错误。 我不知道如何改变有缺陷的线条,任何建议都欢迎!***我尝试更改字符串中的字母数,但错误随之改变,即“索引6 o

  • 我不明白为什么会发生这个错误。m1.length和m1[0].length打印行和列的正确长度。我给出了以下投入: 然后发生了错误