繁体   English   中英

Java局部变量不在if语句外初始化

[英]java Local variable not initializing outside if-statement

Eclipse说变量年龄,agirl和aboy可能尚未初始化。 我在第一个if语句之前初始化了变量,并且它们在if语句中获得了值。 当我想在下一个if语句中使用它们时,说本地变量可能尚未初始化。 这是我的代码:

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,因此您需要给它们提供默认值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM