为什么这个if语句不能正常工作?

时间:2016-01-07 16:54:23

标签: java arrays

我正在尝试删除数组中包含超过7个字母且小于5的所有内容。

程序运行但不会删除超过7个字母且少于5个字母的单词。

我使用了一个迭代器来读取数组,但它似乎忽略了if语句

Iterator<String> it = muligeOrd.iterator();
while (it.hasNext()) {
    if(it.next().length()<=5 && it.next().length()>=7){
        it.remove();
    }
}

4 个答案:

答案 0 :(得分:2)

好的,我们在一行中有两个主要问题

if(it.next().length()<=5 && it.next().length()>=7){

.next()将移动光标,因为您使用的是&&,如果对象的长度为&lt; = 5,则下一次调用会将光标移动到集合中的下一个对象;这可能不是你想要的。

如果不是你想要的东西,并且你想要查找相同的对象,那么它的长度如何同时> 7和<5?

尝试使用此功能,移动光标一次并获取对象,然后将&&更改为||,这将删除任何长度不完全为6个字符的内容。

String something = it.next();
if( something.length() <= 5 || something.length() >= 7 ) {
    it.remove();
}

在你的帖子中你也说

  

该程序运行但它不会删除超过7个字母且少于5个字母的单词。

对我而言,这意味着您要保留所有包含5个,6个或7个字符的内容;如果是这种情况,您需要将<=更改为<

String something = it.next();
if( something.length() < 5 || something.length() > 7 ) { 
    it.remove();
}

答案 1 :(得分:1)

it.next()返回下一个元素并前进,因此&&之后的第二个调用位于下一个元素上。
解决方案:将元素放在if语句之前的变量中,如下所示:

while (it.hasNext()) {
    String str = it.next();
    if(str.length() <= 5 || str.length() >= 7) {
        it.remove();
    }
}

也应该是||,而不是&&

答案 2 :(得分:0)

您的代码说&#34;如果下一个元素是5或更少,而后面的元素是7或更多,那么......&#34;。不要在循环内两次调用next()

此外,您打算检查单个值,请注意它不能同时 小于5且大于7。您的意思可能是||,而不是&&

所以,你的代码应该是:

public void normalOrd() {
    for (Iterator<String> it = muligeOrd.iterator(); it.hasNext(); ) {
        String ord = it.next();
        if (ord.length() <= 5 || ord.length() >= 7) {
            it.remove();
        }
    }
}

答案 3 :(得分:0)

重构您的代码,以便您每次通过循环只调用it.next()一次。

例如:

public void normalWord ( ) {

    Iterator<String> it = muligeOrd.iterator();

    while (it.hasNext()) {
        String nextWord = it.next();
        if ((nextWord.length() <= 5) || (nextWord.length() >= 7)) {
            it.remove();
        }
    }
}