Java变量初始化和if语句
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");
}
}
您的变量已声明,但尚未初始化。
变量的初始化说明它的值是什么。在设置值之前,您不应该使用变量。
它不能在编译时执行逻辑,这对你来说似乎很明显。使用一个else
if(number1>number2)
big=number1;
else /* if(number2>=number1) <-- because, this is a new expression */
big=number2;
还是一个ternary
,
big = (number1>number2) ? number1 : number2;
big = java.lang.Math.max(number1, number2);
局部变量需要在使用前显式初始化或分配。
编译器不知道你的逻辑意味着变量必须分配,它只知道有几个if语句,其中变量可以初始化,但有可能它不会如果如果条件是真的,也不是。
因为你的第二个条件,如果是相反的,如果第一,将其更改为其他:
if(number1>number2)
big=number1;
else
big=number2;
编译器现在会很高兴,不管条件,变量必须分配一个值。
考虑使用三元的一个网上申报和分配:
int big = number1 > number2 ? number1 : number2;
谢谢,我明白了。 – 3pique
此代码将工作。
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");
感谢您的帮助 – 3pique
非常感谢你 – 3pique