【发布时间】:2016-11-12 01:49:45
【问题描述】:
我正在努力实施一种解决方案,以在随机的 5x5 字母板上找到所有单词。目前它正在返回一些单词,但几乎没有返回完整列表。我很确定我的问题存在于我的 for 循环的 findWords 方法中,但我不知道如何使 if 语句继续在所有 8 个方向上遍历。
import java.io.File;
import java.util.*;
public class RandomWordGame {
private static char[][] board = new char[5][5];
private static Random r = new Random();
private static ArrayList<String> dictionary = new ArrayList<String>();
private static char[][] createBoard()
{
for (int i=0; i<board.length; i++)
{
for (int j=0; j<board.length; j++)
{
board[i][j] = (char) (r.nextInt(26) + 'a');
System.out.print(board[i][j]);
}
System.out.println("");
}
System.out.println();
return board;
}
public static ArrayList<String> solver(char[][] board)
{
if(board == null)
System.out.println("Board cannot be empty");
ArrayList<String> words = new ArrayList<String>();
for(int i=0; i<board.length; i++)
{
for(int j=0; j<board[0].length; j++)
{
findWords(i, j, board[i][j] + "");
}
}
return words;
}
public static void findWords(int i, int j, String currWord)
{
try
{
Scanner inputStream = new Scanner(new File("./dictionary.txt"));
while(inputStream.hasNext())
{
dictionary.add(inputStream.nextLine());
}
inputStream.close();
}catch(Exception e){
e.printStackTrace();
}
for(i=0; i>=0 && i<board.length; i++)
{
for(j=0; j>=0; j++)
{
currWord += board[i][j];
if(currWord.length()>5)
return;
if(dictionary.contains(currWord))
System.out.println(currWord);
}
}
}
public static void main(String[] args)
{
board = createBoard();
ArrayList<String> validWords = RandomWordGame.solver(board);
for(String word : validWords)
System.out.println(word);
}
}
【问题讨论】:
-
你的字典文件是什么样的?
-
目前它只返回了几个单词,但还没有返回完整列表... 由于对象
ArrayList<String> words = new ArrayList<String>();从未填充到已发布的代码 sn-p 中,因此我高度评价怀疑它可以包含任何项目。 -
您不需要在 for 循环中重新初始化 i 和 j。但这并不能解决所有问题。以线性方式循环遍历 2D 数组将错过您正在寻找的大多数排列。此外,您应该构建字典一次。您可以在 main 方法中执行此操作。现在,您的程序将完全相同的字典重新制作了 25 次。
-
标签: java file dictionary arraylist boggle