1

Я делаю игру четыре в ряд, где количество строк и colomns определяется игроком (так может быть что угодно, если больше четырех). Таким образом, пользовательский ввод хранится в переменных «rows» и «column». Поле выглядит так, как это, поэтому первая строка всегда является числом.Ошибка вне границ с 2D-массивом Java

У меня проблема с алгоритмом поиска победителя. Хотя мой алгоритм горизонтального поиска работает отлично, вертикальный с той же логикой дает мне ошибку. Если бы вы могли помочь мне обнаружить ошибку, я был бы очень благодарен. Спасибо! | - | - | - | - | | - | - | - | - | - | | - | - | - | - | - |

public static String checkWinner(String [][]field){ 
//horizontally, which works 
    for(int i=1; i<=rows; i++){ 
     for (int j=0; j<=column-1;j++){ 
      if (((j>=3 || j==column-1) && field[i][j]!="|_" && field[i][j]==field[i][j-1] && field[i][j]==field[i][j-2] && field[i][j]==field[i][j-3]) 
      || (field[i][j]!="|_" && field[i][j]==field[i][j+1] && field[i][j]==field[i][j+2] && field[i][j]==field[i][j+3])) 
      { 
       return field[i][j]; 
      } 
     } 
    } 


//vertically which doesn't work 

    for(int i=0; i<column; i++){ 
     for (int j=1; j<=rows-1;j++){ 
     if (((j>=4 || j==rows-1) && field[j][i]!="|_" && field[j][i]==field[j-1][i] && field[j][i]==field[j-2][i] && field[j][i]==field[j-3][i]) 
     || (field[j][i]!="|_" && field[j][i]==field[j+1][i] && field[j][i]==field[j+2][i] && field[j][i]==field[j+3][i])) 
     { 
      return field[i][j]; 
     } 
     } 
    } 
    return null; 
} 
+4

Пожалуйста, форматировать Ваш код правильно, это довольно болезненно, чтобы попытаться прочитать в текущем состоянии – Sinkingpoint

+4

Примечание: 'поле [i] [j]! =" | _ "'. Это не так, как вы сравниваете строки. Используйте 'equals()'. –

+1

Каковы значения 'rows' и' column' – exexzian

ответ

1

В вашей Horizontally логики петли вы используете свой цикл для столбца с j=0 to column-1
, но затем вы обращаетесь к field[i][j] со значениями как j+1, j+2, j+3, которые выходят за рамки column

, например: пользователь вводит column значения как 5 но ваша логика j+2 на j=4 & i=0 сделает доступ к 6-й колонке (field[0][6]), которая, очевидно, OutOfBound.

проверка той же ошибки в логике Вертикально Loop для rows значения

и как ПРИМЕЧАНИЕ: сравнения строк с использованием equals() не используя equality operators like ==

+0

Благодарим вас за ответ. Но эта горизонтальная проверка работает. Строки и столбцы - это входные данные от пользователя, так как насколько он хочет, чтобы его поле было. Но позже я делаю матрицу, используя индексы начиная с 0 до колонки-1. – javaniewbie

+0

@javaniewbie ваше намерение правильно, но вам придется не допустить, чтобы ваша логика проверяла местоположение, которого не существует, - кстати, вы кодируете любую игру. – exexzian

+0

. То, что я еще не понимаю, потому что я не вижу, где я. проверяя местоположение, которого не существует, и почему горизонтальные работы и вертикальные нет. .. Да, я работаю над подключением четырех игр. – javaniewbie

Смежные вопросы