2014-01-25 146 views
-2

Jcreator表示如果(big%2 == 0)變量big可能未被初始化。 然後我將「int big」更改爲「int big = 0」,它可以工作。我在if(big%2 == 0)之前的前兩個if語句中初始化爲什麼會發生這種情況?Java變量初始化和if語句

import java.util.Scanner; 

public class Large 
{ 
    public static void main(String[]args) 
    { 
     Scanner in=new Scanner(System.in); 
     int number1,number2; 
     int big; 
     System.out.println("Enter 2 values"); 
     number1=in.nextInt(); 
     number2=in.nextInt(); 
     if(number1>number2) 
      big=number1; 
     if(number2>=number1) 
      big=number2; 
     if(big%2==0) 
      System.out.println("even"); 
     if(big%2==1) 
      System.out.println("odd"); 
    } 
} 

回答

0

您的變量已聲明,但尚未初始化。

變量的初始化說明它的值是什麼。在設置值之前,您不應該使用變量。

+0

非常感謝你 – 3pique

3

它不能在編譯時執行邏輯,這對你來說似乎很明顯。使用一個else

if(number1>number2) 
    big=number1; 
else /* if(number2>=number1) <-- because, this is a new expression */ 
    big=number2; 

還是一個ternary

big = (number1>number2) ? number1 : number2; 

或者Math.max(int, int)

big = java.lang.Math.max(number1, number2); 
+3

+1或'Math.max(數字1,數字);':) –

+0

@JoshM良好的通話。添加它。 –

+0

謝謝你幫助我 – 3pique

0

局部變量需要在使用前顯式初始化或分配。

編譯器不知道你的邏輯意味着變量必須分配,它只知道有幾個if語句,其中變量可以初始化,但有可能它不會如果如果條件是真的,也不是。

因爲你的第二個條件,如果是相反的,如果第一,將其更改爲其他:

if(number1>number2) 
    big=number1; 
else 
    big=number2; 

編譯器現在會很高興,不管條件,變量必須分配一個值。


考慮使用三元的一個網上申報和分配:

int big = number1 > number2 ? number1 : number2; 
+0

謝謝,我明白了。 – 3pique

0

此代碼將工作。

Scanner in=new Scanner(System.in); 
    int number1,number2; 
    int big; 
    System.out.println("Enter 2 values"); 
    number1=in.nextInt(); 
    number2=in.nextInt(); 
    if(number1>number2) { 
     big=number1; 
    } else if(number2>number1) { 
     big=number2; 
    } else { 
     big = number1; 
    } 
    if(big%2==0) 
     System.out.println("even"); 
    if(big%2==1) 
     System.out.println("odd"); 
+0

感謝您的幫助 – 3pique