Teka-teki Pencarian Kata Java di Char Array

Saya sedang mengerjakan metode untuk menemukan kata di kotak teka-teki kata.

Huruf-huruf tersebut dimasukkan ke dalam matriks. Metode ini harus mencetak baris dan kolom tempat huruf pertama dari kata tersebut ditemukan dan arah (n, s, e, w, ne, nw, se, sw) di mana pola tersebut masuk.

Metode yang saya miliki saat ini adalah:

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";}

Masalahnya adalah mencari tahu bagaimana mengembalikan arah pola tersebut bersama dengan huruf pertama dari kata tersebut (Hanya lulus satu kasus uji). Namun, saya yakin metode ini dapat mengetahui apakah kata tersebut ada di dalam grid atau tidak.


person Sinister    schedule 12.04.2018    source sumber


Jawaban (1)


Cara paling langsung adalah dengan mendefinisikan kelas yang menangkap semua data yang ingin Anda kembalikan. Misalnya:

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

Kemudian, jika Anda menemukan kata pencarian, buatlah instance baru dari kelas ini dan kembalikan. Jika kata pencarian tidak ditemukan, kembalikan saja null. Perhatikan bahwa Anda harus mengubah tipe pengembalian metode Anda dari String menjadi Result.

Saya tidak akan berkomentar tentang logika deteksi kode Anda saat ini, selain untuk mencatat bahwa kode tersebut tidak menguji apa pun dengan benar. Ini juga berisiko melempar ArrayIndexOutOfBoundsException karena Anda tidak memeriksa apakah Anda lolos dari tepian teka-teki.

Alternatifnya, Anda dapat terus menyandikan semuanya sebagai String dan mengembalikan string tiga elemen: return rd + ", " + rc + ", " + dir;.

person Ted Hopp    schedule 12.04.2018