java 局部变量未在 if 语句外部初始化



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

此行

int aboy, agirl, age;

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

必须先在所有执行路径中使用它们之前为它们设置值。 在声明它们时将它们初始化为某些内容。

您不仅可以拥有一个未初始化的变量,还可以保证

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

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

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

初始化是给变量赋值。声明是创建变量。它们是不一样的。

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

最新更新