字符串导致意外错误

时间:2014-01-11 07:28:31

标签: java

我遇到了一些代码的问题,在关卡的构造函数中,我有这个.public

Level(int width, int height, String level) {
    grid=new Block[width][height];
    String v = "";
    for (int y = 0; y < height; y++) {
        for (int x = 0; x < width; x++) {
            char s = level.charAt(y * height + x);
            if (s=='#') {
                grid[x][y] = new Wall(x, y);
            } else if (s=='_'){
                grid[x][y] = new Block(x, y);
            }
        }
    }
}

仅当我使用以下内容运行Level初始化程序时...

              new Level(16,16,"###############" +
                              "#_____________#" +
                              "#___######____#" +
                              "#___#____###__#" +
                              "#___#__###_#__#" +
                              "#####_________#" +
                              "#_____#__######" +
                              "#___###_______#" +
                              "#_#_#_# #####_#" +
                              "#_#___#____#__#" +
                              "#_#####__###_##" +
                              "#_____####____#" +
                              "#_#_#______##_#" +
                              "###_#__#####__#" +
                              "#___#______#__#" +
                              "###############");

我得到了

    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: 
    String Index out of range: 240
at java.lang.String.charAt(String.java:686)
at Level.<init>(Level.java:17)
at Game.<init>(Game.java:12)
at Main.main(Main.java:7)`

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

你的网格是16 * 15(因此在计算char位置时是例外)

[编辑] 修改您的公式

char s = level.charAt(y * width + x);

答案 1 :(得分:1)

此外,

char s = level.charAt(y * height + x);

应该是

char s = level.charAt(y * width + x);