Char数组中的Java单词搜索拼图

时间:2018-04-12 16:00:49

标签: java arrays matrix methods

我正在研究一种在单词拼图网格上找到单词的方法。

字母放在矩阵中。该方法应该打印出行和列,找到该单词的第一个字母和该模式进入的方向(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";}

问题是找出如何返回模式的方向以及单词的第一个字母(它只传递了一个测试用例)。但是,我确信该方法可以判断该单词是否在网格中。

1 个答案:

答案 0 :(得分:0)

最直接的方法是定义一个捕获您想要返回的所有数据的类。例如:

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

然后,如果找到搜索词,请创建此类的新实例并将其返回。如果找不到搜索词,只需返回null即可。请注意,您必须将方法的返回类型从String更改为Result

我不打算对您当前代码的检测逻辑发表评论,除非注意到它没有正确测试任何内容。它还冒着投掷ArrayIndexOutOfBoundsException的风险,因为你没有检查你是否正在逃离谜题的边缘。

或者,您可以继续将所有内容编码为String并返回三元素字符串:return rd + ", " + rc + ", " + dir;