簡體   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