gpt4 book ai didi

java - Boggle 求解器的实现

转载 作者:太空宇宙 更新时间:2023-11-04 12:04:23 24 4
gpt4 key购买 nike

我正在努力实现一个解决方案来查找随机 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,但这并不是杀死您的原因,因为您正在打印 findWords 的每个结果。

问题在于 findWords 方法只是从拼图的左上角开始连续添加字母。

//i=0 and j=0 means it will always start at the top left tile
for(i=0; i>=0 && i<board.length; i++)
{
for(j=0; j>=0; j++)
{
//currWord is never reset, so it just keeps getting longer
currWord += board[i][j];
if(currWord.length()>5)
return;
if(dictionary.contains(currWord))
System.out.println(currWord);
}
}

现在,您只能找到以所选图 block 开头的单词,其余字母的选取顺序与从左上角开始添加到拼图中的顺序相同。

我建议花一些时间用铅笔和纸,深入了解二维数组索引及其在网格中的位置之间的关系。

关于java - Boggle 求解器的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40558761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com