2016-01-12 34 views
1

我有用户在int[]中输入5个整数的列表。然后我用简单的for语句在int []中查看这些int。我有一个int变量声明为“evens”。如果int []中的数字在i %2 == 0,evens++;Java`if`语句和`else if`不能按预期工作

现在我有if声明:

if (evens !=2 || evens!=3) { 
    System.out.print("This was called because " + evens + " is not equal to 2 or 3"); 
} 

的问题是,这是被称为无论在什么找齐值。它可以是5或3,并且仍然被调用。我最近一直在使用C#,但这是简单的Java。

整个代码:

int evens = 0; 
    for(int i=0; i<chosenNumbers.length; i++) { 
     if(chosenNumbers[i] %2 ==0) 
      evens++; 
    } 

System.out.println("You chose "+evens+" even numbers and " + (chosenNumbers.length-evens) + " odd numbers."); 

    if (evens !=2 || evens!=3) { 
     System.out.print("This was called because " + evens + " is not equal to 2 or 3"); 
    } else if (evens==2 || evens==3) { 
     System.out.print(evens +" equals 2 or 3"); 
    } 
+0

试着说'找齐!= 2 || evens!= 3'英文:“如果evens不同于2 **或者** evens与3不同,那么......”。然后你会意识到,任何数字总是不同于2 *或*与5不同。你可能是指**和**而不是*或*。 –

+0

感谢您的回复。 –

回答

2

你需要更换:

if(evens !=2 || evens!=3) { 
    System.out.print("This was called because " + evens + " is not equal to 2 or 3"); 
} 

有:

if(evens !=2 && evens!=3) { 
    System.out.print("This was called because " + evens + " is not equal to 2 or 3"); 
} 

如果使用逻辑或||,你将永远进入块,作为它不会进入的唯一方法是它evens等于2和3在同一时间whi ch是不可能的。

0

可以使用

if(!(evens ==2 || evens==3)) { 
     System.out.print("This was called because " + evens + " is not equal to 2 or 3"); 
} else { 
     System.out.print(evens +" equals 2 or 3"); 
} 
+0

@ MrAwesome8,不是真的......布尔代数可以正确应用:'!(a || b)'相当于'!a &&!b'。这是[De Morgan的法律]的一部分(https://en.wikipedia.org/wiki/De_Morgan%27s_laws)。恶魔和细节... – YoYo

+0

@JoD。确切地说,这就是为什么这个答案“没有用”,因为它给出了与AntonH早12分钟给出的相同答案,但没有任何解释。不需要重复的答案。 –

+0

@ErwinBolwidt我可以同意这是作为标记/投票的理由,但第一条评论应该撤回为不正确。 – YoYo