簡體   English   中英

在if語句中初始化變量(Java)

[英]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塊中將iz初始化為某個值。

除非兩個都初始化,否則您不能執行if(i>z) ,因為您需要初始化局部變量。

在允許比較i > z之前,編譯器必須滿足iz都已初始化的要求。 您的代碼不能保證這一點,因為只有通過if..else邏輯的某些路徑會初始化兩個變量。

您有兩種選擇:

  • i開始就啟動iz 到0或其他合適的默認值
  • 確保在每個if塊中設置iz

其他幾個樣式問題:

  • 使用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邏輯之前,分配兩個臨時變量以保存st1st2的下一個標記,並將它們與Ace,King等進行比較。

在這種情況下,針對String比較的一個更優雅的解決方案是使用switch / case語句

我建議使用Integer類。 如果last if語句之前的條件都不滿足,請檢查是否使用null check初始化了這些Integer

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM