Как я должен иметь дело с ArrayIndexOutOfBound Exceptions?

Похоже, вы пытаетесь избежать передачи ссылки на this в метод. Передача this намного лучше, чем поиск вызывающего абонента по текущей трассировке стека. Рефакторинг для более OO-дизайна еще лучше. Вам не нужно знать вызывающего абонента. При необходимости передайте объект обратного вызова.

0
задан Yashvi Shah 16 January 2019 в 19:47
поделиться

1 ответ

Я предполагаю, что его причиной является операция по модулю только над частью назначенного значения, а не над целым:

for (int dir = 0; dir < DIRECTIONS.length; dir++) 
{ 
    dir = ( (dir) + (randDirection) % DIRECTIONS.length);
}

Вероятно, должно быть:

for (int dir = 0; dir < DIRECTIONS.length; dir++) 
{ 
    dir = ( (dir) + (randDirection) ) % DIRECTIONS.length;
}

Несколько ключей примечания: форматирование в вашем вопросе не очень хорошее - форматирование должно разбить вопрос на ключевые части, предоставляя нам простой способ понять, что именно вы спрашиваете нас, и отформатировать все части кода, чтобы отличать их от остальных. [ 116]

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

Дать вашим переменным осмысленные имена, имеющие r, rr, c, cc, довольно странно для тех, кто не знает, что должен делать ваш код.

Вы также можете извлечь части своего кода в отдельные методы, чтобы сделать его более понятным.

В конечной точке

for (i = 0, rr = r, cc = c; i < word.length(); i++) {                   
    if (rr < rows && cc < cols && i < word.length()) { 

Эта проверка избыточна и может измениться на

for (i = 0, rr = r, cc = c; i < word.length(); i++) {                   
    if (rr < rows && cc < cols) { 
0
ответ дан Worthless 16 January 2019 в 19:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: