ファイルから単語リストを読み込み、単語の順列を見つけて、正規化された単語をすべて格納する基本プログラムを書く必要がありますバージョンを1つのチェーンにまとめる。正規化されたバージョンは常にチェーンの上に置かれます。 正規化された単語をインデックスキーとして使用する必要がありますが、単語の順列は、指定されたhsah位置に文字列の配列として返されます。JavaのScrabblecheater:ネストされたArrayListに正しく書き込む方法
入れ子のArrayListを使用して、インデックスキーと並べ替えの格納を実装しようとしました。
private File testfile = new File("wordlist.txt");
private ArrayList<ArrayList<String>>[] table;
int entries = 0;
public Dictionary(int size) {
table = new ArrayList[size];
for (int i = 0; i < size; i++)
table[i] = new ArrayList<ArrayList<String>>(99);
}
public void newDictionary() {
for (int i = 0; i < table.length; i++)
table[i] = new ArrayList<ArrayList<String>>(99);
}
当社のハッシュ関数は次のようになります。
public void hash(String word) {
word = word.toLowerCase();
String id = normalize(word);
int hashValue = 0;
char[] chars = word.toCharArray();
for (int i = 0; i < chars.length; i++) {
int e = chars[i] - 97;
hashValue += e * 26^i;
}
if (hashValue < 0)
hashValue = hashValue * (-1);
ArrayList<ArrayList<String>> chain = table[hashValue];
boolean newList = true;
boolean cB = chain.isEmpty();
if (chain.size() > 0) {
for (int i = 0; i < chain.size(); i++) {
ArrayList<String> currentChain = chain.get(i);
try {
String a = currentChain.get(0);
System.out.println(a);
} catch (Exception e) {
System.out.println("ERROR!");
}
}
}
if (newList == true || chain.size() == 0) {
chain.add(new ArrayList<String>());
chain.get(0).add(0, id);
chain.get(0).add(word);
}
}
我々は適切例えば、ネストされたのArrayListを実装しますが、ArrayList<ArrayList<String>> chain = table[hashValue];
にアクセスしようとすると仮定boolean cB = chain.isEmpty();
を呼び出すと、プログラムがクラッシュします。
それ以外は、currentChain
のインデックス0のすべての値を印刷することはできません。 それぞれのprint-methodをtry-catchブロックで囲みました。そうしないと、プログラムがクラッシュしました。今、私たちのプログラムが実行されますが、稀に文字列を出力しない、むしろ印刷方法を実行しているときに例外がスローされます。
try {
String a = currentChain.get(0);
System.out.println(a);
} catch (Exception e) {
e.printStackTrace();
}
スタックトレースは、次のエラーが出力さ:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at Dictionary.hash(Dictionary.java:78)
at Dictionary.readFromFile(Dictionary.java:32)
at Main.main(Main.java:9)
我々はおよそかなり混乱しています次のようになります。Index: 0, Size: 0
入れ子ArrayList
を正しく実装しましたか? ほとんどの場合、私たちがArrayList内にStringを正しく格納できない理由は何でしょうか?
例外「処理」を実装するのは本当に恐ろしい方法です。あなたは、無駄なtry/catchブロックを追加することで、自分自身で難しいものにしています。それらを追加することを主張するならば、スタックトレースを少なくとも*印刷する必要があります。しかし、例外をキャッチするのではなく、役に立たない何かをすることはできません。 –
Stacktraceはいい考えです.thx – jottr
ok、stacktraceの出力を追加しました。 – jottr