[英]Initialize variable inside if statement (Java)
我在if
語句中分配變量,並嘗試在變量之外使用它們,但我不知道如何使用。 錯誤出現在最后一個if
語句中,指出“本地變量可能尚未初始化”。
int i,z;
if (st1.nextToken() == "Ace")
{
String Ace = "14";
i = Integer.parseInt(Ace);
}
else if (st2.nextToken() == "Ace")
{
String Ace = "14";
z = Integer.parseInt(Ace);
}
else if (st1.nextToken() == "King")
{
String King = "13";
i = Integer.parseInt(King);
}
else if (st2.nextToken() == "King")
{
String King = "13";
z = Integer.parseInt(King);
}
else if (st1.nextToken() == "Queen")
{
String Queen= "12";
i = Integer.parseInt(Queen);
}
else if (st2.nextToken() == "Queen")
{
String Queen= "12";
z = Integer.parseInt(Queen);
}
else if (st1.nextToken() == "Jack")
{
String Jack = "11";
i = Integer.parseInt(Jack);
}
else if (st2.nextToken() == "Jack")
{
String Jack = "11";
z = Integer.parseInt(Jack);
break;
}
else
{
i = Integer.parseInt(st1.nextToken());
z = Integer.parseInt(st2.nextToken());
}
if (i > z)
更換:
int i,z;
有:
int i=0, z=0; //or whatever value you want
或者在所有if-else
塊中將i
和z
初始化為某個值。
除非兩個都初始化,否則您不能執行if(i>z)
,因為您需要初始化局部變量。
在允許比較i > z
之前,編譯器必須滿足i
和z
都已初始化的要求。 您的代碼不能保證這一點,因為只有通過if..else
邏輯的某些路徑會初始化兩個變量。
您有兩種選擇:
i
開始就啟動i
和z
。 到0或其他合適的默認值 if
塊中設置i
和z
其他幾個樣式問題:
equals()
比較字符串,而不是==
,例如。 st1.nextToken().equals("Ace")
從而:
String Jack = "11";
i = Integer.parseInt(Jack);
可以變成:
i = 11;
要么:
i = JACK; // where JACK is a constant set to 11
您可能還會遇到與讀取令牌有關的錯誤。 每個if
表達式都調用nextToken() ,這將導致使用流中的下一個標記。 我想您想比較每個表達式中的當前標記。 如果是這種情況,則在您的if..else
邏輯之前,分配兩個臨時變量以保存st1
和st2
的下一個標記,並將它們與Ace,King等進行比較。
在這種情況下,針對String比較的一個更優雅的解決方案是使用switch / case語句
我建議使用Integer類。 如果last if語句之前的條件都不滿足,請檢查是否使用null
check初始化了這些Integer 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.