2

此应用程序匹配两个单词列表,一个在字典文件中,一个由应用程序在 TreeSet 中生成。也许有更好的方法来做到这一点,但这超出了这个问题的范围——我们使用的方式是从文件中读取一行,从 TreeSet 中读取一行,比较它们并

如果 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 条件中的两个字符串,是吗?是否有可能保持这种方法的简单性(不再混乱),同时失去奇怪的 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 回答