2015-11-03 227 views
1

我創建一個井字遊戲,我遇到一個問題,我的琴絃字符串初始化

代碼:

import java.util.Scanner; 

public class TicTacToe { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 

     String player1Letter; 
     String player2Letter; 

     System.out.print("Player 1 Name: "); 
     String player1 = input.next(); 
     System.out.print('\f'); 

     System.out.print("Player 2 Name: "); 
     String player2 = input.next(); 
     System.out.print('\f'); 

     System.out.print(player1 + ", Choose X or O: "); 
     String letter = input.next(); 

     if (letter.equalsIgnoreCase("x")) { 
      player1Letter = "X"; 
     } else { 
      player2Letter = "O"; 
     } 

     if (letter.equalsIgnoreCase("o")) { 
      player1Letter = "O"; 
     } else { 
      player2Letter = "X"; 
     } 

     System.out.print('\f'); 
     System.out.println("How To"); 
     System.out.println("-------"); 
     System.out.println(); 
     System.out.println(" 1 | 2 | 3 "); 
     System.out.println("-----------"); 
     System.out.println(" 4 | 5 | 6 "); 
     System.out.println("-----------"); 
     System.out.println(" 7 | 8 | 9 "); 
     System.out.println(); 

     while (true) { 
      System.out.print("Type 'begin' To Begin: "); 
      String begin = input.next(); 
      if (begin.equalsIgnoreCase("begin")) { 
       break; 
      } else if (!begin.equals("begin")) { 
       System.out.print('\f'); 
       System.out.println("Incorrect Syntax"); 
       System.out.println(); 
      } 
     } 
     System.out.println(player1 + "'s Turn " + player1Letter); 
     System.out.println("-----------------------------------"); 
     System.out.println(); 
     System.out.println(" | | "); 
     System.out.println("-----------"); 
     System.out.println(" | | "); 
     System.out.println("-----------"); 
     System.out.println(" | | "); 
    } 
} 

駛向何方,它說

System.out.println(player1 + "'s Turn " + player1Letter); 

我的底部得到錯誤說「變量player1Letter可能沒有被初始化」。我在if語句之外創建了字符串,並在if語句內初始化它們。現在我打電話給我,我無法弄清楚這裏有什麼問題。謝謝!

回答

3

改變你的初始化代碼:

if (letter.equalsIgnoreCase("x")) { 
    player1Letter = "X"; 
    player2Letter = "O"; 
} else { 
    player1Letter = "O"; 
    player2Letter = "X"; 
} 

所以您將初始化兩個變量總是

+0

這將工作,但值得注意的是,例如,如果輸入「z」或「lampshade」,則即使提示要求輸入X或O,也會執行後一種情況。 – Monkeygrinder

2

此消息告訴您至少有一條路徑通過代碼,其中變量在第一次使用前保持未初始化狀態。 明確的賦值分析消除了其他語言中最常見的錯誤原因之一。

在這種情況下,如果letter既不等於「x」也不等於「o」,那麼player1Letter不會被初始化。

您可以通過確保player1Letterplayer2Letter在首次訪問之前始終進行初始化來解決此問題。要做到這一點的方法之一是:

boolean isPlayer1X = letter.equalsIgnoreCase("x"); 
String player1Letter = isPlayer1X ? "X" : "O"; 
String player2Letter = isPlayer1X ? "O" : "X"; 
0

試試這個:

​​
2

您正在初始化if的一側的字符串,但不在另一側。你需要初始化一個字符串雙方相同if爲了編譯器能夠確定字符串已經被初始化了。

最簡單的選擇是在聲明時初始化兩個字符串。

0

你正在初始化一個if體內的字符串。仔細閱讀錯誤。 if語句可能並非總是如此。所以要確保你的變量總是被初始化,在if條件之外初始化它。希望這有助於:)