此应用程序匹配两个单词列表,一个在字典文件中,一个由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条件下读取两个字符串,有吗? 是否有可能保持这种方法的简单性(不再杂乱),同时失去奇怪的同时(1)?
最好的问候。
答案 0 :(得分:17)
首先,while(1)
在Java中无效。你需要while(true)
。就个人而言,我倾向于将其处理为:
String line;
while ((line = reader.readLine()) != null && TreeIterator.hasNext())
{
...
}
虽然我通常不喜欢条件下的副作用,但这种“获得下一个并检查它实际存在”的方法是足够常见的,正常的可读性疼痛不是IME的问题。
答案 1 :(得分:7)
你可以写
for(String dict; TreeIterator.hasNext() && (dict=reader.readLine()) != null; ) {
if (dict.equals(TreeIterator.next())...save
elseif > .... read tree
elseif < .... read file
}
我不确定这是否更清洁。
答案 2 :(得分:3)
是。试试
String dict;
while ( (dict = reader.readLine()) != null && TreeIterator.hasNext() )
答案 3 :(得分: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();
}
答案 4 :(得分:0)
您可以用休息条件替换while:
String dict;
while((dict = reader.readLine()) != null && TreeIterator.hasNext())
这样,停止条件更具可读性