2014-01-11 2 views
3

У меня возникли проблемы с какой-то код, в конструкторе уровне, у меня есть this.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); 
      } 
     } 
    } 
} 

Только тогда, когда я бегу инициализатору уровня со следующими ...

   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)` 

Любая помощь очень ценится.

ответ

4

Ваша сетка 16 * 15 (и, следовательно, исключение при расчете char позиции)

[EDIT] изменить вам формулу

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

А я плохой. Большое спасибо за это. – Barakados

+0

Эта формула также неверна: 'y * height + x'. –

+0

yep Также, чтобы быть на более безопасной стороне, я всегда буду проходить высоту как первый аргумент, а затем ширину до моей функции .... –

1

Также

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

, вероятно be

char s = level.charAt(y * width + x); 
Смежные вопросы