2016-12-31 44 views
3

代碼是檢查一個數字是偶數還是奇數使用最後一位是1或0. 如果最後一位是1,它將進入if和print odd我得到一個類型不匹配的錯誤從int到布爾值

import java.util.Scanner; 

public class Even_or_odd { 
    public void Check_even_or_odd(int a) { 
     if(a&1)//error:Type mismatch: cannot convert from int to boolean 
      System.out.println("odd"); 
     else 
      System.out.println("even"); 
    } 
    public static void main(String[] args) { 
     System.out.println("enter a number to check even or odd"); 
     Scanner scan=new Scanner(System.in); 
     int a=scan.nextInt(); 
     scan.close(); 
     Even_or_odd e=new Even_or_odd(); 
     e.Check_even_or_odd(a); 
    } 
} 
+0

伊蘭你能不能來嗎?在添加&1 == 1後添加 –

+0

。我得到了錯誤多個標記在該行 \t - 比較一致的表達 \t - 操作員是未定義的參數類型INT, \t布爾 –

+0

基本上,Java不把數字作爲布爾值,與C和一些其他的語言。 0或任何數字,都不是真或假。你正在對兩個整數進行二進制和運算,最終得到一個整數。不是布爾值。 –

回答

4

你的代碼測試a爲是奇數/偶數通過掩蔽與1其二進制表示,其具有設定爲零,除了至少一個顯著,其被設置爲1所有位。

奇數會產生1當被屏蔽1;偶數會產生零。但是,您不能編寫if (1)if (0),因爲在Java中沒有從intboolean的隱式轉換。您需要編寫

if ((a&1) != 0) 

解決此問題。

+0

謝謝,它解決了這個問題。 –

+0

但是我仍然明白爲什麼我們需要編寫if((a&1)!= 0) –

+0

dasblinkenlight,所以根據你的while(1)也不能在java中工作? –

3

代替二進制運算的,這是我猜你正在嘗試做的,使用模檢查輸入值:

if (a % 2 == 0) { 
    System.out.println("even"); 
} else { 
    System.out.println("odd"); 
} 

在if語句的條件塊,你必須有一個布爾值或一個評估爲布爾值的表達式。 a&1評估爲一個整數。

另請參閱Check whether number is even or odd

+0

我知道程序使用%opertaor,但我只是想突出顯示相同的程序在java中使用按位運算符,因爲它是轟炸錯誤。 –

相關問題