java - 为什么当我尝试重新分配一个变量时我收到错误,“删除这个无用的分配给局部变量”
问题描述
每次运行 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;
}
}
解决方案
在我的程序中,播放方法运行多次
但是由于player
它是一个局部变量,因此赋值没有任何效果,因为它在随后的方法调用中不是持久的play
。Java 正确地抱怨了这一点。
如果您想在播放器之间循环,有多种方法可以这样做,但最简单的方法是更改您的play
方法以接受播放器作为参数,而不是将其声明为本地函数,并让play
方法的调用者跟踪目前的球员。
接下来,您可以通过认识到两个玩家具有完全相同的逻辑来大大缩短您的代码。唯一的区别是哪个符号存储在棋盘矩阵中。因此,为该符号创建一个变量,并使用该变量而不是硬编码'X'
的 s 和'O'
s 执行板更新。
推荐阅读
- c# - 查看已签署的协议时,有没有办法配置 DocuSign 的 UI?
- node.js - 在分叉的子进程中, process.exit() 在 await 函数完成之前执行
- python - 如何使用 ImageGrab.grab().load() 函数或任何其他函数来获取像素更新?
- mysql - 有没有办法比较两个创建表查询并通过添加新列来更改现有表?
- reactjs - 如何在打字稿中使用反应安全地定义 HTMLCollectionOf 元素?
- javascript - 未找到 Puppeteer 相关模块且未找到依赖项
- r - 如何为 RNA-Seq 中的基因-基因相互作用创建邻接矩阵(循环输入)
- docker - 将 docker 主机镜像与本地注册表同步
- python - Django查询并列出相关多对多字段中的所有对象
- javascript - AJAX 请求已发送,但 $_POST 未更新