Java变量初始化和if语句

时间:2014-01-25 05:18:23

标签: java variables initialization

Jcreator说变量big可能尚未初始化if(big%2==0) 然后我将"int big"更改为"int big=0",它有效。我在big之前的前两个if语句中初始化了if(big%2==0),为什么会这样?

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");
     }
}

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

您的变量已声明,但尚未初始化。

变量的初始化表明其值是什么。在设置其值之前,不应使用变量。

答案 2 :(得分:0)

本地变量在使用之前需要显式初始化或赋值。

编译器不知道你的逻辑意味着必须分配变量,它只知道有几个if语句,其中变量可以被初始化,但是它有可能是如果条件不成,则不会。

因为第二个if条件与第一条条件相反,所以将其更改为else:

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

编译器现在很高兴无论条件如何,都必须为变量赋值。


考虑使用三元作为一行声明和赋值:

int big = number1 > number2 ? number1 : number2;

答案 3 :(得分: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");