1

TicTacToe ゲームを作成していますが、文字列に問題があります。

コード:

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

の片側で文字列を初期化していますが、反対側では初期化してifいません。コンパイラが文字列が初期化されたことを確認できるようにするには、文字列の両側で文字列を初期化する必要があります。 if

最も簡単なオプションは、宣言時に両方の文字列を初期化することです。

于 2015-11-03T23:51:18.790 に答える
2

このメッセージは、変数が最初に使用される前に初期化されていないコードのパスが少なくとも 1 つあることを示しています。この明確な代入分析により、他の言語で最も頻繁に発生するエラーの原因の 1 つが排除されます。

この場合、letter「x」でも「o」でもない場合、player1Letter は初期化されません。

player1Letter最初のアクセスの前にとplayer2Letterが常に初期化されるようにすることで、これを修正できます。これを行う1つの方法は次のとおりです。

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

代わりにこれを試してください:

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