2

このアプリケーションは、2 つの単語のリストを照合します。1 つは辞書ファイル内にあり、もう 1 つはアプリケーションによって生成された TreeSet 内にあります。これを行うためのより良い方法があるかもしれませんが、それはこの質問の範囲外です-私たちが使用する方法は、ファイルから1行、TreeSetから1行を読み取り、それらを比較して比較することです

TreeSet 行がファイル行と等しい場合は保存します

TreeSet 行 > ファイル行の場合、ファイルから行を読み取ります

ファイル行> TreeSet行の場合、TreeSetから行を読み取ります

擬似コード:

while (1) {
    String dict = reader.readLine();
    if (dict == null || !TreeIterator.hasNext()) break;
    if (dict.equals(TreeIterator.next())...save
    elseif > .... read tree
    elseif < .... read file
}

while (1) を使用するのは正しくないようですが、この二重の条件をより明確に表現する方法が見つかりませんでした。while の条件内の 2 つの文字列を読み取る方法はありませんね。奇妙な while(1) を失いながら、このアプローチの単純さを維持することは可能ですか (これ以上混乱することはありません)。

よろしくお願いします。

4

5 に答える 5

17

まず、while(1)Java では無効です。が必要while(true)です。個人的には、これを次のように処理する傾向があります。

String line;
while ((line = reader.readLine()) != null && TreeIterator.hasNext())
{
    ...
}

私は通常、条件の副作用が好きではありませんが、この「次のものを取得して実際に存在することを確認する」というアプローチは十分に一般的であるため、通常の読みやすさの問題は IME の問題ではありません。

于 2012-08-28T14:39:27.337 に答える
7

あなたは書ける

for(String dict; TreeIterator.hasNext() && (dict=reader.readLine()) != null; ) {
    if (dict.equals(TreeIterator.next())...save
    elseif > .... read tree
    elseif < .... read file
}

これがよりきれいかどうかはわかりません。

于 2012-08-28T14:40:00.607 に答える
3

はい。試す

String dict;
while ( (dict = reader.readLine()) != null && TreeIterator.hasNext() )
于 2012-08-28T14:39:42.577 に答える
1

これはどうですか(疑似コードで):

String dict = reader.readLine();
while (dict != null && TreeIterator.hasNext()) {
    if (dict.equals(TreeIterator.next())...save
    elseif > .... read tree
    elseif < .... read file
    dict = reader.readLine();
}
于 2012-08-28T14:40:17.540 に答える
0

while をブレーク条件に置き換えることができます。

String dict;
while((dict = reader.readLine()) != null && TreeIterator.hasNext())

このようにして、停止条件がより読みやすくなります

于 2012-08-28T14:39:42.403 に答える