1
임의의 5x5 보드에서 모든 단어를 찾는 솔루션을 구현하는 데 어려움을 겪고 있습니다. 현재는 몇 마디이지만 거의 전체 목록은 아닙니다. 나는 내 문제가 find 루프와 함께 findWords 메소드 내에 있다는 것을 확신하지만 if 문을 8 가지 방향으로 계속 이동시키기 위해 무엇을해야 하는지를 알 수 없다.Boggle 솔버 구현
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 words = new ArrayList ();'이 게시 된 코드 스 니펫에 채워지지 않으므로, 항목. –
for 루프에서 i와 j를 재 초기화 할 필요가 없습니다. 그것은 모든 것을 고치는 것은 아닙니다. 선형 방식으로 2D 배열을 반복하면 찾고있는 순열의 대부분을 놓치게됩니다. 또한 사전을 한 번 작성해야합니다. 기본 방법에서이 작업을 수행 할 수 있습니다. 지금 당신의 프로그램은 똑같은 사전을 25 번 리메이크합니다. –