Головоломка поиска слов Java в массиве символов

Я работаю над методом поиска слова в сетке словесной головоломки.

Буквы помещаются в матрицу. Метод должен распечатать строку и столбец, в которых была найдена первая буква слова, и направление (n, s, e, w, ne, nw, se, sw), в котором идет шаблон.

В настоящее время у меня есть метод:

public static String wordSearch(int r, int c, String letters, String search){
  int x[] = { -1, -1, -1, 0, 0, 1, 1, 1 };
  int y[] = { -1, 0, 1, -1, 1, -1, 0, 1 };
  char [][] puzzle = new char [r][c];
  int count = 0;
  for (int i = 0; i < r; i++){
     for (int j = 0; j < c; j++){
        puzzle[i][j] = letters.charAt(count);
        count++;
     }
  }
  int length = search.length();
  for (int dir = 0; dir < 8; dir++)
  {
     int k;
     int rd = r + x[dir]; 
     int cd = c + y[dir];

     for (k = 1; k < length; k++)
     {
        rd += x[dir]; 
        cd += y[dir];
     }
     if (k == length)
        return rd+ ", "+cd;
  }
  return "Not found";}

Проблема заключается в том, чтобы выяснить, как вернуть направление, в котором шаблон идет вместе с первой буквой слова (он прошел только один тест). Однако я уверен, что этот метод может определить, находится ли слово в сетке или нет.


person Sinister    schedule 12.04.2018    source источник


Ответы (1)


Самый прямой способ — определить класс, который собирает все данные, которые вы хотите вернуть. Например:

public class Result {
    int row;
    int col;
    int direction;
}

Затем, если вы найдете искомое слово, создайте новый экземпляр этого класса и верните его. Если искомое слово не найдено, просто верните null. Обратите внимание, что вам придется изменить тип возвращаемого значения вашего метода с String на Result.

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

В качестве альтернативы вы можете продолжить кодировать все как String и вернуть строку из трех элементов: return rd + ", " + rc + ", " + dir;.

person Ted Hopp    schedule 12.04.2018