首页 > 解决方案 > 为什么当我尝试重新分配一个变量时我收到错误,“删除这个无用的分配给局部变量”

问题描述

每次运行 if 语句之一时,我都尝试重新分配 player 变量,但由于某种原因,java 不允许我重新分配播放器,我不知道为什么。在我的程序中,play 方法运行了多次,因为这是一个井字游戏。java初学者,如果这个问题的答案真的很简单,请原谅。

public static void play(char[][] gameBoard) {
        int player = 2;
        Scanner scan = new Scanner(System.in);
        System.out.println("Player " + player + " enter your placement (1-9)");
        int pos = scan.nextInt();
        System.out.println(pos);

        if (player == 1) {
            switch (pos) {
                case 1:
                    gameBoard[0][0] = 'X';
                    break;
                case 2:
                    gameBoard[0][2] = 'X';
                    break;
                case 3:
                    gameBoard[0][4] = 'X';
                    break;
                case 4:
                    gameBoard[2][0] = 'X';
                    break;
                case 5:
                    gameBoard[2][2] = 'X';
                    break;
                case 6:
                    gameBoard[2][4] = 'X';
                    break;
                case 7:
                    gameBoard[4][0] = 'X';
                    break;
                case 8:
                    gameBoard[4][2] = 'X';
                    break;
                case 9:
                    gameBoard[4][4] = 'X';
                    break;
                default:
                    break;
            }
            player = 2;
            printGameBoard(gameBoard);

        } else {
            switch (pos) {
                case 1:
                    gameBoard[0][0] = 'O';
                    break;
                case 2:
                    gameBoard[0][2] = 'O';
                    break;
                case 3:
                    gameBoard[0][4] = 'O';
                    break;
                case 4:
                    gameBoard[2][0] = 'O';
                    break;
                case 5:
                    gameBoard[2][2] = 'O';
                    break;
                case 6:
                    gameBoard[2][4] = 'O';
                    break;
                case 7:
                    gameBoard[4][0] = 'O';
                    break;
                case 8:
                    gameBoard[4][2] = 'O';
                    break;
                case 9:
                    gameBoard[4][4] = 'O';
                    break;
                default:
                    break;
            }
            printGameBoard(gameBoard);
            player = 1;
        }
    }

标签: java

解决方案


在我的程序中,播放方法运行多次

但是由于player它是一个局部变量,因此赋值没有任何效果,因为它在随后的方法调用中不是持久的play。Java 正确地抱怨了这一点。

如果您想在播放器之间循环,有多种方法可以这样做,但最简单的方法是更改​​您的play方法以接受播放器作为参数,而不是将其声明为本地函数,并让play方法的调用者跟踪目前的球员。

接下来,您可以通过认识到两个玩家具有完全相同的逻辑来大大缩短您的代码。唯一的区别是哪个符号存储在棋盘矩阵中。因此,为该符号创建一个变量,并使用该变量而不是硬编码'X'的 s 和'O's 执行板更新。


推荐阅读