0

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

3 回答 3

1

这条线

int aboy, agirl, age;

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

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

于 2013-10-14T16:04:40.497 回答
0

您不仅可能有一个未初始化的变量,而且您肯定会有

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

看起来您正试图通过在您的 s中具有“神奇”值来巧妙地结合 aboolean和 an的功能。这是一个糟糕的设计,因为不清楚魔术是如何工作的,但您可以通过将所有值初始化为:intintint0

int aboy = 0, agirl = 0, age = 0;
于 2013-10-14T16:05:14.430 回答
0

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

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

于 2013-10-14T16:06:09.700 回答