[英]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
具有“魔術”值來巧妙地組合boolean
和int
的功能。 這是一個糟糕的設計,因為尚不清楚魔術的工作原理,但是您可以通過將所有int
值初始化為0
來運行示例:
int aboy = 0, agirl = 0, age = 0;
初始化是為變量分配一個值。 聲明是創建變量。 她們不一樣。
您需要初始化變量的原因是因為有可能它們不會被初始化。 所有的if語句都可能為false,因此您需要給它們提供默認值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.