繁体   English   中英

是否有比(1)......更干净的方式更清洁;?

[英]Is there a cleaner way than while (1) … break;?

此应用程序匹配两个单词列表,一个在字典文件中,一个由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
}

在(1)中使用它似乎不正确,但我没有找到更清晰的方式来表达这种双重条件。 没有办法在while条件下读取两个字符串,有吗? 是否有可能保持这种方法的简单性(不再杂乱),同时失去奇怪的同时(1)?

最好的祝福。

首先, while(1)在Java中无效。 你需要while(true) 我个人倾向于处理这个:

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

虽然我通常不喜欢条件下的副作用,但这种“获得下一个并检查它实际存在”的方法是足够常见的,正常的可读性疼痛不是IME的问题。

你可以写

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

我不确定这是否更干净。

是。 尝试

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

这个怎么样(伪代码):

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

您可以用休息条件替换while:

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

这样,停止条件更具可读性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM