java局部变量没有初始化if-statement外部

时间:2013-10-14 16:02:29

标签: java variables if-statement initializing

Eclipse说,变量age,agirl和aboy可能尚未初始化。我在第一个if语句之前初始化了变量,并在if语句中得到了值。当我想在下一个if语句中使用它们时,eclipse表示局部变量可能尚未初始化。 这是我的代码:

import java.util.Scanner;

class Main{
public static void main(String args[]){
    Scanner input = new Scanner(System.in);
    String define;
    int aboy, agirl, age;
    System.out.println("Are you a boy or a girl?");
    define = input.next();

    if (define.equals("boy")){
        System.out.println("What is your age?");
        aboy = input.nextInt();
        age = aboy;
    }else if (define.equals ("girl")){
        System.out.println("What is your age?");
        agirl = input.nextInt();
        age = agirl;
    }else
        System.out.println("wrong answer");
    if (agirl >= 18 || aboy >= 16){
        System.out.println("You are a " + define + " and you are " + age  + " years old");
    }
}
}

3 个答案:

答案 0 :(得分:1)

这一行

int aboy, agirl, age;

包含声明,而不是初始化。 Java不会为你初始化一个局部变量,并且有一个执行路径(else),其中没有任何东西被分配给那些变量,然后你试图引用它们不存在的值。

在使用它们之前,必须在所有执行路径中为它们设置值。在声明它们时将它们初始化为某种东西。

答案 1 :(得分:0)

不仅可能你有一个未初始化的变量,你保证

查看您的控制流程:您首先要求define的值,然后执行其中一个块。如果define"boy",则不会初始化agirl;如果define"girl",则不会初始化aboy,如果define也不匹配,则根本不会初始化任何变量。< / p>

看起来您正试图通过在boolean中拥有“魔法”值来巧妙地将intint的功能组合在一起。这是糟糕的设计,因为它不清楚魔法是如何工作的,但您可以通过将所有int值初始化为0来运行示例:

int aboy = 0, agirl = 0, age = 0;

答案 2 :(得分:0)

初始化正在为变量赋值。 声明正在创建变量。它们不一样。

您需要初始化变量的原因是因为它们可能无法初始化。所有if语句都可能为false,因此您需要为它们提供默认值。