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 语句中对其进行了初始化。现在我正在调用它,我无法弄清楚这里有什么问题。谢谢!

4

5 回答 5

3

像这样更改初始化代码:

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

所以你将始终初始化这两个变量

于 2015-11-03T23:48:14.560 回答
2

此消息告诉您,在代码中至少有一条路径,变量在第一次使用之前未初始化。这种明确的分配分析消除了其他语言中最常见的错误原因之一。

在这种情况下,如果letter既不等于“x”也不等于“o”,那么 player1Letter 将不会被初始化。

您可以通过确保player1Letter并且player2Letter始终在首次访问之前对其进行初始化来解决此问题。一种方法是:

boolean isPlayer1X = letter.equalsIgnoreCase("x");
String player1Letter = isPlayer1X ? "X" : "O";
String player2Letter = isPlayer1X ? "O" : "X";
于 2015-11-03T23:47:03.413 回答
2

您在 an 的一侧初始化一个字符串,if但在另一侧没有初始化。您需要在同一字符串的两侧初始化一个字符串,以便编译能够确定该字符串已被初始化。 if

最简单的选择是在声明时初始化两个字符串。

于 2015-11-03T23:51:18.790 回答
0

试试这个:

player2Letter = "O";
player1Letter = "X";
if (letter.equalsIgnoreCase("x")) {
    player2Letter = "X";
    player1Letter = "O";
}
于 2015-11-03T23:50:38.073 回答
0

您正在初始化 if 正文中的字符串。仔细阅读错误。if 语句可能并不总是正确的。因此,要确保始终初始化您的变量,请在 if 条件之外对其进行初始化。希望这可以帮助 :)

于 2015-11-04T00:21:01.947 回答