- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑:我注意到,当您为 TicTacToe 表输入错误的数字时,我的程序会输出“无效移动”。什么会导致这种情况呢?我只使用 move(row, col) 方法一次,因此它不会重复无效输入两次。
我一直在构建一个 Tic Tac Toe 程序,我相信我已经完成了 99.9%。有一个令人讨厌的循环我无法弄清楚,我已经添加了一些东西一段时间来尝试修复它。我认为这只是一个我自己似乎无法注意到的小愚蠢错误。
无论如何,问题是一旦我完成游戏并输入"is",程序就会终止并结束。可能是什么原因造成的,因为我将 while 循环放在另一个 do while 循环中,这样我就可以摆脱它,然后立即返回到它。
这是我的整个代码。
import java.util.Scanner;
public class TicTacToe {
// These two variables are for placing the X's and O's in the TicTacToe
// table.
static int row;
static int col;
// This array is for the TicTacToe table.
static char[][] table = new char[3][3];
// This is for ending the while statement that controls the game
static boolean continuePlaying = true;
static boolean quitGame = false;
// These will store the names for player 1 and 2
static String p1;
static String p2;
// This variable is to count the number of games played
static int gamesCounter = 0;
// This variable is to count the number of moves
static int moveCounter = 0;
// These two variables are to keep track of the wins each player has
static int p1Wins = 0;
static int p2Wins = 0;
static void clearTable() {
for (int i = 0; i < table.length; i++) {
table[0][i] = ' ';
table[1][i] = ' ';
table[2][i] = ' ';
}
}
// This method will determine if the game is a tie.
static boolean checkTie() {
for (int i = 0; i < table.length; i++) {
for (int j = 0; j < table[i].length; j++) {
if (table[i][j] == ' ') {
return false;
}
}
}
return true;
}
// This is my displayTable() method. This will show the table and the X's or
// O's each player has played
static void displayTable() {
System.out.println(" 0 1 2");
System.out.println("0[" + table[0][0] + "][" + table[0][1] + "]["
+ table[0][2] + "]");
System.out.println("1[" + table[1][0] + "][" + table[1][1] + "]["
+ table[1][2] + "]");
System.out.println("2[" + table[2][0] + "][" + table[2][1] + "]["
+ table[2][2] + "]");
}
// This is my move(int row,int col) method. This will record the moves each
// player takes and insert X's or O's depending on which player
static boolean move(int row, int col) {
// This if statement will return false if the user enters in coordinates
// outside the 3x3 zone.
if (row > 2 || row < 0) {
System.out.println("Invalid move.");
return false;
}
// This if statement checks if the array already has an X or O in the
// chosen space. If the array is already filled it will return false.
else if (table[row][col] == 'X' || table[row][col] == 'O') {
System.out.println("Not available.");
return false;
} else
return true;
}
// This is my checkRow method. It checks for 3 X's or O's in a row. If there
// are 3 in a row it will return true, if not, it returns false.
static boolean checkRow(int row) {
if ((table[row][0] & table[row][1] & table[row][2]) == 'X')
return true;
if ((table[row][0] & table[row][1] & table[row][2]) == 'O')
return true;
else
return false;
}
// This is my checkCol method. It checks for 3 X's or O's in a row. If there
// are 3 in a row it will return true, if not, it returns false.
static boolean checkCol(int col) {
if ((table[0][col] & table[1][col] & table[2][col]) == 'X')
return true;
if ((table[0][col] & table[1][col] & table[2][col]) == 'O')
return true;
else
return false;
}
// This is my checkDiagonal method. It checks for 3 X's or O's in a row. If
// there are 3 in a row it will return true, if not, it returns false.
static boolean checkDiagonal() {
if ((table[0][0] & table[1][1] & table[2][2]) == 'X')
return true;
if ((table[2][0] & table[1][1] & table[0][2]) == 'X')
return true;
if ((table[0][0] & table[1][1] & table[2][2]) == 'O')
return true;
if ((table[2][0] & table[1][1] & table[0][2]) == 'O')
return true;
else
return false;
}
// This is my checkWinner method. It runs all the other checks to see if
// anyone won.
// If there is a winner the method returns true. If there is no winner yet,
// the method returns false.
static boolean checkWinner() {
if (checkRow(0) == true)
return true;
if (checkRow(1) == true)
return true;
if (checkRow(2) == true)
return true;
if (checkCol(0) == true)
return true;
if (checkCol(1) == true)
return true;
if (checkCol(2) == true)
return true;
if (checkDiagonal() == true)
return true;
else
return false;
}
public static void main(String[] args) {
// The Scanner for asking each player's names
Scanner s = new Scanner(System.in);
// The beginning structure of the TicTacToe program
System.out.println("TicTextToe");
System.out.print("Name of player 1: ");
p1 = s.nextLine();
// Asks for Player 2's name
System.out.print("Name of player 2: ");
p2 = s.nextLine();
do {
// The TicTacToe table set up, coordinates provided around the
// squares
// The displayTable() method will be used to display the table here.
while (continuePlaying == true) {
displayTable();
System.out.print("Player " + p1 + ":");
row = s.nextInt();
col = s.nextInt();
move(row, col);
// This will display the table again and ask for proper
// coordinates.
while (move(row, col) == false) {
displayTable();
System.out.println("Player " + p1 + ":");
row = s.nextInt();
col = s.nextInt();
move(row, col);
}
// This inputs the X into the table if move(row, col) returns
// true.
if (move(row, col) == true) {
moveCounter++;
table[row][col] = 'X';
}
// This will check if p1 just won the game or if the game needs
// to
// continue
checkRow(0);
// System.out.println(checkRow(0)); //This prints out if row 0
// is
// true or false
checkRow(1);
// System.out.println(checkRow(1)); //This prints out if row 1
// is
// true or false
checkRow(2);
// System.out.println(checkRow(2)); //This prints out if row 2
// is
// true or false
checkCol(0);
// System.out.println(checkCol(0)); //This prints out if column
// 0 is
// true or false
checkCol(1);
// System.out.println(checkCol(1)); //This prints out if column
// 1 is
// true or false
checkCol(2);
// System.out.println(checkCol(2)); //This prints out if column
// 2 is
// true or false
checkDiagonal();
// System.out.println(checkDiagonal()); //This prints out true
// or
// false depending on the diagonals
checkWinner();
// System.out.println(checkWinner()); //This prints out if
// checkWinner is true or false. If it's true the while loop
// should
// end
// This will check if there is a tie
// checkTie();
if (moveCounter == 9) {
displayTable();
System.out.println("It's a tie!");
gamesCounter++;
clearTable();
moveCounter = 0;
System.out.println("Another Game? Yes/No :");
String answer = s.next();
if (answer.equals("Yes")) {
break;
}
if (answer.equals("No")) {
continuePlaying = false;
clearTable();
System.out.println("Statistics:");
System.out.println(p1 + p1Wins + "/" + gamesCounter);
System.out.println(p2 + p2Wins + "/" + gamesCounter);
quitGame = false;
break;
}
}
if (checkWinner() == true) {
displayTable();
System.out.println("Player " + p1 + " wins!");
gamesCounter++;
p1Wins++;
clearTable();
moveCounter = 0;
System.out.println(p1 + " " + p1Wins + "/" + gamesCounter);
System.out.println(p2 + " " + p2Wins + "/" + gamesCounter);
System.out.println("Another game? Yes/No :");
String answer = s.next();
if (answer.equals("Yes")) {
break;
} else if (answer.equals("No")) {
continuePlaying = false;
System.out.println("Statistics:");
System.out.println(p1 + p1Wins + "/" + gamesCounter);
System.out.println(p2 + p2Wins + "/" + gamesCounter);
quitGame = false;
break;
}
}
displayTable();
System.out.print("Player " + p2 + ":");
row = s.nextInt();
col = s.nextInt();
move(row, col);
// This will display the table again and ask for proper
// coordinates.
while (move(row, col) == false) {
displayTable();
System.out.println("Player " + p2 + ":");
row = s.nextInt();
col = s.nextInt();
move(row, col);
}
// This inputs the O into the table if move(row, col) returns
// true.
if (move(row, col) == true) {
moveCounter++;
table[row][col] = 'O';
}
// This will check if p2 just won the game or if the game needs
// to
// continue
// checkRow(0);
// System.out.println(checkRow(0)); //This prints out if row 0
// is
// true or false
checkRow(1);
// System.out.println(checkRow(1)); //This prints out if row 1
// is
// true or false
checkRow(2);
// System.out.println(checkRow(2)); //This prints out if row 2
// is
// true or false
checkCol(0);
// System.out.println(checkCol(0)); //This prints out if column
// 0 is
// true or false
checkCol(1);
// System.out.println(checkCol(1)); //This prints out if column
// 1 is
// true or false
checkCol(2);
// System.out.println(checkCol(2)); //This prints out if column
// 2 is
// true or false
checkDiagonal();
// System.out.println(checkDiagonal()); //This prints out true
// or
// false depending on the diagonals
checkWinner();
// System.out.println(checkWinner()); //This prints out if
// checkWinner is true or false. If it's true the while loop
// should
// end
// This will check if there is a tie
// checkTie();
if (moveCounter == 9) {
displayTable();
System.out.println("It's a tie!");
gamesCounter++;
clearTable();
moveCounter = 0;
System.out.println("Another Game? Yes/No :");
String answer = s.next();
if (answer.equals("Yes")) {
break;
}
if (answer.equals("No")) {
continuePlaying = false;
clearTable();
System.out.println("Statistics:");
System.out.println(p1 + p1Wins + "/" + gamesCounter);
System.out.println(p2 + p2Wins + "/" + gamesCounter);
quitGame = false;
break;
}
}
if (checkWinner() == true) {
displayTable();
System.out.println("Player " + p2 + " wins!");
gamesCounter++;
p2Wins++;
clearTable();
System.out.println(p1 + " " + p1Wins + "/" + gamesCounter);
System.out.println(p2 + " " + p2Wins + "/" + gamesCounter);
System.out.println("Another game? Yes/No :");
String answer = s.next();
if (answer.equals("Yes")) {
break;
}
if (answer.equals("No")) {
continuePlaying = false;
clearTable();
System.out.println("Statistics:");
System.out.println(p1 + p1Wins + "/" + gamesCounter);
System.out.println(p2 + p2Wins + "/" + gamesCounter);
quitGame = true;
break;
}
}
}
} while (quitGame = false);
}
}
最佳答案
您的状况检查正常:
while (quitGame = false);
应该是:
while (quitGame == false);
双等号。
关于java - Tic Tac Toe 程序循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28388383/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!