2015-11-03 209 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条件之外初始化它。希望这有助于:)