2013-04-01 151 views
0

我有這個代碼的問題其對一所學校的任務,編譯時它說變量hitOrStick可能尚未初始化

hitOrStick might not have been initialized 

我不知道是什麼原因造成的,因爲我敢肯定它已經初始化,如果你能發現任何其他錯誤,將不勝感激。

(我知道它不是真正的黑色插孔,它是非常基本的!)再次感謝。

import java.util.Scanner; 
import java.util.Random; 
import java.lang.*; 

class blackjack 

{ 
    public static void main(String[] args) 
    { 

Scanner scan = new Scanner(System.in); 

int total; 
boolean play; 
int computerTotal = 0; 
String hitOrStick; 

System.out.println("You are playing BLACK JACK."); 

    int card1 = (int) Math.ceil(Math.random() * 10); 
    int card2 = (int) Math.ceil(Math.random() * 10); 
    total = card1+card2; 

    System.out.println("Card 1 value: "+ card1); 
    System.out.println(" "); 
    System.out.println("Card 2 value: "+ card2); 
    System.out.println(" "); 
    System.out.println("You have: " + total); 
    System.out.println(" "); 

    if(total == 21) 
     { 
     System.out.println("Blackjack! Congratulations you have won!"); 
     } 
    while(total < 21) 
     { 
     System.out.println("Would you like to hit or stick? please type 'H' or 'S'"); 
     System.out.println(" "); 
     System.out.println("If you type anything other than the options it will count as a STICK."); 
     hitOrStick = scan.next(); 
     } 
     if(hitOrStick == "H") 
      { 
      int hitCard = (int) Math.ceil(Math.random() * 10); 
      System.out.println("New Card value: "+ hitCard); 
      total = total + hitCard; 
      System.out.println(" "); 
      System.out.println("You now have: " + total); 
       if(total > 21) 
       { 
       System.out.println("YOU ARE BUST!"); 
       } 
      } 
      else 
      { 
      System.out.println(" "); 
      System.out.println("You have chosen to stick."); 
      System.out.println(" "); 
      System.out.println("Your total is: " + total); 
      computerTotal = (int) Math.ceil(Math.random() * 20); 
      System.out.println(" "); 
      System.out.println("the computer has: " + computerTotal); 
      } 

      if (computerTotal > total) 
      { 
      System.out.println(" "); 
      System.out.println("COMPUTER WINS!"); 
      } 
      else 
      { 
      System.out.println(" "); 
      System.out.println("YOU WIN!"); 
      } 





} 
} 
+1

將顯式空值置於您的var。例如String hitOrStick = null; – user1697575

回答

2

只需要聲明的初始值:

String hitOrStick = ""; // or null 

編譯器不解釋你的代碼,以確保該變量將被設置爲一個值時,它的使用,它只是指出,它可能是可能的。

事實上,如果您使用的是Eclipse,您可以設置您的首選項,以便此編譯器錯誤僅僅是警告或忽略的條件。

+0

或者您可以點擊「繼續」,觀察程序是否崩潰。 – Justin

+0

嗨,感謝您的幫助,但我堅持了我應該結束while循環的原因,因爲atm總是要求H/S選項 – user2233480

+1

@ user2233480您的while循環永遠不會結束。看一下條件:'while(total <21)'但是在你的循環中,總數不會受到影響。你是否希望它延伸超過你的許多if語句?只需移動一個} – Justin

1

編譯器抱怨你的字符串var沒有初始值。將顯式空值置於您的var。 例如 String hitOrStick=null;

1

在你的代碼在這裏:

int total; 
boolean play; 
int computerTotal = 0; 
String hitOrStick; 

幾個變量已經被命名,但沒有初始化。它有助於初始化它們全部:

int total = 0; 
boolean play = false; 
int computerTotal = 0; 
String hitOrStick = ""; 

通過這樣做,您可以確保更少的錯誤發生。因爲hitOrStick被命名,未初始化,然後在後面的代碼發生


你的錯誤,你有if (hitOrStick == "H")(這不是一個好主意,更好地爲if (hitOrStick.equals("H"))),而hitOrStick尚未初始化,它可以被調用。

+0

循環內的初始化**肯定會**持續循環。它與範圍無關。但是,如果前兩張牌產生** 22 **並且'while'循環從不會穿過它的正文,那麼實際上會有一個未初始化變量的比較。 –