所以,我一直負責使用2d數組網格創建一個單詞搜索程序。單詞搜索在java中使用2d數組 - 通過第二個字母
到目前爲止,我的代碼可以在網格中找到所有2個字母的單詞,但是超出2個字母的長度並且代碼跳過它們。我現在在凌晨2點已經疲憊不堪,所以它可能是一件明顯缺少的東西,但如果沒有,請幫我解決問題?
當前的搜索代碼:
/**
* Searches for a word in this LetterGrid using traditional WordSearch
* rules.
*
* @param word
* the word to look for
*/
public boolean wordSearch(String word)
{
// Check each letter in grid
for (int row = 0; row < this.noOfRows; row++)
{
for (int col = 0; col < this.rowLength; col++)
{
if (grid[row][col] == word.charAt(0) && word.length() > 1)
{
return gridCheck(row, col, word, 1);
}
else if (grid[row][col] == word.charAt(0))
{
return true;
}
}
}
return false;
}
public boolean gridCheck(int row, int col, String word, int charToFind)
{
if (charToFind == word.length() - 1)
{
return true;
}
else if (charToFind < word.length() - 1)
{
// Where is the letter being checked? -contingency check-
// if letter being checked is not touching any edge [most likely]
if (row > 0 && row < this.noOfRows && col > 0
&& col < this.rowLength)
{
// FOR CODES SEE CHECKPLACES.TXT
// A
if (grid[row - 1][col - 1] == word.charAt(charToFind))
{
gridCheck(row - 1, col - 1, word,
word.charAt(charToFind + 1));
}
// B
else if (grid[row - 1][col] == word.charAt(charToFind))
{
gridCheck(row - 1, col, word, word.charAt(charToFind + 1));
}
// C
else if (grid[row - 1][col + 1] == word.charAt(charToFind))
{
gridCheck(row - 1, col + 1, word,
word.charAt(charToFind + 1));
}
// D
else if (grid[row][col - 1] == word.charAt(charToFind))
{
gridCheck(row, col - 1, word, word.charAt(charToFind + 1));
}
// E
else if (grid[row][col + 1] == word.charAt(charToFind))
{
gridCheck(row, col + 1, word, word.charAt(charToFind + 1));
}
// F
else if (grid[row + 1][col - 1] == word.charAt(charToFind))
{
gridCheck(row + 1, col - 1, word,
word.charAt(charToFind + 1));
}
// G
else if (grid[row + 1][col] == word.charAt(charToFind))
{
gridCheck(row + 1, col, word, word.charAt(charToFind + 1));
}
// H
else if (grid[row + 1][col + 1] == word.charAt(charToFind))
{
gridCheck(row + 1, col + 1, word,
word.charAt(charToFind + 1));
}
}
// Letter is touching top left corner
if (row == 0 && col == 0)
{
// E
if (grid[row][col + 1] == word.charAt(charToFind))
{
gridCheck(row, col + 1, word, word.charAt(charToFind + 1));
}
// H
else if (grid[row + 1][col + 1] == word.charAt(charToFind))
{
gridCheck(row + 1, col + 1, word,
word.charAt(charToFind + 1));
}
// G
else if (grid[row + 1][col] == word.charAt(charToFind))
{
gridCheck(row + 1, col, word, word.charAt(charToFind + 1));
}
}
// Letter is touching top Right corner
if (row == 0 && col == this.rowLength)
{
// D
if (grid[row][col - 1] == word.charAt(charToFind))
{
gridCheck(row, col - 1, word, word.charAt(charToFind + 1));
}
// F
else if (grid[row + 1][col - 1] == word.charAt(charToFind))
{
gridCheck(row + 1, col - 1, word,
word.charAt(charToFind + 1));
}
// G
else if (grid[row + 1][col] == word.charAt(charToFind))
{
gridCheck(row + 1, col, word, word.charAt(charToFind + 1));
}
}
// Letter is Touching bottom Left Corner
if (row == this.noOfRows && col == 0)
{
// B
if (grid[row - 1][col] == word.charAt(charToFind))
{
gridCheck(row - 1, col, word, word.charAt(charToFind + 1));
}
// C
else if (grid[row - 1][col + 1] == word.charAt(charToFind))
{
gridCheck(row - 1, col + 1, word,
word.charAt(charToFind + 1));
}
// E
else if (grid[row][col + 1] == word.charAt(charToFind))
{
gridCheck(row, col + 1, word, word.charAt(charToFind + 1));
}
}
// Letter is touching bottom right corner
if (row == this.noOfRows && col == this.rowLength)
{
// A
if (grid[row - 1][col - 1] == word.charAt(charToFind))
{
gridCheck(row - 1, col - 1, word,
word.charAt(charToFind + 1));
}
// B
else if (grid[row - 1][col] == word.charAt(charToFind))
{
gridCheck(row - 1, col, word, word.charAt(charToFind + 1));
}
// D
if (grid[row][col - 1] == word.charAt(charToFind))
{
gridCheck(row, col - 1, word, word.charAt(charToFind + 1));
}
}
// letter is on top row of grid
if (row == 0 && col > 0 && col < this.rowLength)
{
// D
if (grid[row][col - 1] == word.charAt(charToFind))
{
gridCheck(row, col - 1, word, word.charAt(charToFind + 1));
}
// E
else if (grid[row][col + 1] == word.charAt(charToFind))
{
gridCheck(row, col + 1, word, word.charAt(charToFind + 1));
}
// F
else if (grid[row + 1][col - 1] == word.charAt(charToFind))
{
gridCheck(row + 1, col - 1, word,
word.charAt(charToFind + 1));
}
// G
else if (grid[row + 1][col] == word.charAt(charToFind))
{
gridCheck(row + 1, col, word, word.charAt(charToFind + 1));
}
// H
else if (grid[row + 1][col + 1] == word.charAt(charToFind))
{
gridCheck(row + 1, col + 1, word,
word.charAt(charToFind + 1));
}
}
// Letter is on bottom row of grid
if (row == this.noOfRows && col > 0 && col < this.rowLength)
{
// FOR CODES SEE CHECKPLACES.TXT
// A
if (grid[row - 1][col - 1] == word.charAt(charToFind))
{
gridCheck(row - 1, col - 1, word,
word.charAt(charToFind + 1));
}
// B
else if (grid[row - 1][col] == word.charAt(charToFind))
{
gridCheck(row - 1, col, word, word.charAt(charToFind + 1));
}
// C
else if (grid[row - 1][col + 1] == word.charAt(charToFind))
{
gridCheck(row - 1, col + 1, word,
word.charAt(charToFind + 1));
}
// D
else if (grid[row][col - 1] == word.charAt(charToFind))
{
gridCheck(row, col - 1, word, word.charAt(charToFind + 1));
}
// E
else if (grid[row][col + 1] == word.charAt(charToFind))
{
gridCheck(row, col + 1, word, word.charAt(charToFind + 1));
}
}
// Letter is on Leftmost column of grid
if (col == 0 && row > 0 && row < this.noOfRows)
{
// B
if (grid[row - 1][col] == word.charAt(charToFind))
{
gridCheck(row - 1, col, word, word.charAt(charToFind + 1));
}
// C
else if (grid[row - 1][col + 1] == word.charAt(charToFind))
{
gridCheck(row - 1, col + 1, word,
word.charAt(charToFind + 1));
}
// E
else if (grid[row][col + 1] == word.charAt(charToFind))
{
gridCheck(row, col + 1, word, word.charAt(charToFind + 1));
}
// G
else if (grid[row + 1][col] == word.charAt(charToFind))
{
gridCheck(row + 1, col, word, word.charAt(charToFind + 1));
}
// H
else if (grid[row + 1][col + 1] == word.charAt(charToFind))
{
gridCheck(row + 1, col + 1, word,
word.charAt(charToFind + 1));
}
}
// Letter is on rightmost column of grid
if (col == this.rowLength && row > 0 && row < this.noOfRows)
{
// A
if (grid[row - 1][col - 1] == word.charAt(charToFind))
{
gridCheck(row - 1, col - 1, word,
word.charAt(charToFind + 1));
}
// B
else if (grid[row - 1][col] == word.charAt(charToFind))
{
gridCheck(row - 1, col, word, word.charAt(charToFind + 1));
}
// D
else if (grid[row][col - 1] == word.charAt(charToFind))
{
gridCheck(row, col - 1, word, word.charAt(charToFind + 1));
}
}
}
// If word is not found
return false;
}
網格物體[櫃面我們需要它]的構造函數如下 -
/**
* Constructs a new LetterGrid Object
*
* @param letterGridFile
* the file to use
*/
public LetterGrid(String letterGridFile)
{
try
{
// Init Scanner
Scanner fileIn = new Scanner(new File(letterGridFile));
// Init ArrayList
ArrayList<String> nextLine = new ArrayList<String>(10);
// Read Data
while (fileIn.hasNextLine())
{
nextLine.add(fileIn.nextLine());
noOfRows++;
}
fileIn.close();
rowLength = nextLine.size();
grid = new char[noOfRows][rowLength];
// Add data to grid
for (int rowCount = 0; rowCount < noOfRows; rowCount++)
{
grid[rowCount] = (nextLine.get(rowCount).toCharArray());
}
}
// In case file name is mistyped or nonexistent
catch (IOException exp)
{
System.out.println("Oops, something went wrong.");
System.out.println("--> File Not Found");
}
}
最後,參考我使用的搜索方式:
Places to check the X = current letter to check around
Row Col Code A B C
-1 -1 A
-1 0 B D X E
-1 1 C
0 -1 D F G H
0 1 E
1 -1 F
1 0 G
1 1 H
謝謝大家的幫助=)
-Apok