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 はローカル変数を初期化せず、それらの変数に何も割り当てられていない実行パス ( else) があり、存在しない値を参照しようとします。

すべての実行パスで、それらを使用する前に値を設定する必要があります。それらを宣言するときに、それらを何かに初期化します。

于 2013-10-14T16:04:40.497 に答える
0

初期化とは、変数に値を割り当てることです。宣言は変数を作成しています。それらは同じではありません。

変数を初期化する必要があるのは、変数が初期化されない可能性があるためです。すべての if ステートメントは false になる可能性があるため、デフォルト値を指定する必要があります。

于 2013-10-14T16:06:09.700 に答える
0

初期化されていない変数があるだけでなく、それが保証ています。

制御フローを見てください。最初に の値を要求し、define次にブロックの 1 つだけを実行します。の場合define"boy"、初期化しませんagirl。の場合define"girl"初期化せず、どちらにも一致しないaboy場合defineは、変数をまったく初期化しません。

sに「魔法の」値を持たせることで、 abooleanと anの機能を巧みに組み合わせようとしているようです。魔法がどのように機能するかが明確ではないため、これは貧弱な設計ですが、すべての値を次のように初期化することで例を実行できます。intintint0

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