2016-01-12 180 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