1

ランダムな 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);
    }
}
4

2 に答える 2

0

このコードにはいくつかおかしな点があります。1 つは、ソルバー メソッドから常に空の 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);
    }
}

現時点では、選択したタイルで始まる単語のみが検索されます。残りの文字は、左上からパズルに追加されたのと同じ順序で選択されます。

紙と鉛筆で充実した時間を過ごし、2 次元配列のインデックスとグリッド内の位置との関係を詳しく理解することをお勧めします。

于 2017-01-10T14:42:13.657 に答える