学習目的で Ruzzle ソルバー Java アプリケーションをプログラミングしようとしています。Ruzzleタイプのマップで「単語を見つける」という問題に少し問題があります。
Ruzzle マップの例 (各セルに 1 文字の 4 行 4 列で構成されています) :
Z O O H
E Y L H
I E L I
H O F M
http://www.maclife.com/files/imagecache/futureus_imagegallery_fullsize/gallery/ruzzle1.jpg
そのような地図で見つけることができるすべての可能な単語のリストを取得したいと思います.
難点:縦、横、斜めに文字を追加して単語を見つけることができます(例:「HELLO」)。
これまでのところ、3 つのクラスを作成しました。
Ruzzlesolver.java
文字.java
Map.java
手紙クラス
マップの単一の文字を記述します。そのフィールドは、セルの X 位置と Y 位置、および文字です。
Ruzzlesolver クラス
これがメインクラスです。
- Ruzzleマップを読み取ります(コンソールに1行ずつ入力)
- dictionnary.txtファイルを読み取ります
- マップを辞書ファイルと比較します
- results.txtファイルに書き込みます
各行は char 配列に格納されます。次に、取得した 4 つの配列から新しい Map オブジェクトを作成します。
地図クラス
これは Map オブジェクトのコンストラクタです:
public Map(final char[] pTab1, final char[] pTab2, final char[] pTab3, final char[] pTab4)
{
this.aLettres = new ArrayList<Letter>();
for (int i = 0 ; i < 4 ; i++) {
this.aLettres.add(new Letter(1, i+1, pTab1[i]));}
for (int i = 0 ; i < 4 ; i++) {
this.aLettres.add(new Letter(2, i+1, pTab2[i]));}
for (int i = 0 ; i < 4 ; i++) {
this.aLettres.add(new Letter(3, i+1, pTab3[i]));}
for (int i = 0 ; i < 4 ; i++) {
this.aLettres.add(new Letter(4, i+1, pTab4[i]));}
}
this.aLettres は、マップの 16 文字のそれぞれを含む ArrayList です。
各文字は、その列 (X 位置: "i+1")、その行 (Y 位置: "1、2、3、および 4")、およびその文字 ("pTab[i]") を認識します。
地図と各文字の場所がわかったので、単語を見つけ始めることができます。
contains() メソッド
これは私の問題です:私は次の方法を使用して立ち往生しています:
呼び方
- Ruzzlesolver クラスの辞書から単語を選びます。
この単語をパラメータとして、Map オブジェクトの contains() メソッドを呼び出します。
if (this.aMap.contains(vMot)) {/*print vMot in the result.txt file*/}
contains() メソッドはどのように機能しますか
変数:
char[] vChars = new char[pMot.length()]; ArrayList<Letter> vFoundCharS1 = new ArrayList<Letter>();
pMot の各文字を ArrayList にストックする:
for (int i = 0 ; i < pMot.length() ; i++) { vChars[i] = pMot.charAt(i); }
pMot の最初の文字を検索する:
for (Letter vL : this.aLettres) { if (vL.getChar() == vChars[0]) { vFoundCharS1.add(vL); return true; } }
- ハマった。
この方法を続けると、進行するにつれてどんどん長いブロックを作成する必要があります。さらに、すべての長さの可能性を考慮するには、16 ブロックを書き込む必要があります。
これは間違った方法だと確信しています。そのような治療法をどのように実装しますか?
ご協力いただきありがとうございます。
PS : 文法/英語の間違いをお詫びします。英語は私の母国語ではありません。