2014-01-25 98 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