java - JAVA中“while循环”后的输出不一致
问题描述
我是 JAVA 新手,写了一个 Nim 游戏项目,其中包括 Nimsys 和 Nimplayer。一切似乎都很好。当我运行测试文件时,结果是正确的。
但是,当它再次播放时,突然出现了一个额外的空间,我无法弄清楚。可能会有一些错误。非常感谢任何帮助。
import java.util.Scanner;
public class Nimsys {
int stoneBalance;
public static void main(String[] args) {
String playOrNot;
Scanner input = new Scanner(System.in);// Scanner
System.out.println("Welcome to Nim\n");
// bring two players in the main.
System.out.println("Please enter Player 1's name:");
NimPlayer player1 = new NimPlayer(); // bring player1 object to be used
String name1 = input.nextLine(); // set the string's name to be used
System.out.println("");
NimPlayer player2 = new NimPlayer(); // bring player2 object to be used
System.out.println("Please enter Player 2's name:");
String name2 = input.nextLine();
System.out.println("");
do {
// stone upper bound
System.out.println("Please enter upper bound of stone removal:");
int removeUpBound = input.nextInt();
System.out.println("");
// intital stone numbers
System.out.println("Please enter initial number of stones:");
int totalStone = input.nextInt();
System.out.println("");
NimPlayer numStone = new NimPlayer(); // bring new object to be used
numStone.initialStone(totalStone);
System.out.print(numStone.stoneBalance + " stones left:");
numStone.printStar(totalStone);
// while stoneBalance > 0, two players keep playing the game
while (numStone.stoneBalance > 0) {
// player1's turn and remove the stones; decision of winning
player1.enterName(name1); // pass the name to be used
player1.player1Turn();
int takeStone = input.nextInt();
while (takeStone > removeUpBound || takeStone <= 0) {
System.out.println(
"Invalid, you need to remove stones under upper bound limit or above 0. \n Please enter again.");
takeStone = input.nextInt();
}
numStone.removeStones(takeStone);
if (numStone.stoneBalance > 0) {
System.out.print(numStone.stoneBalance + " stones left:");
numStone.printStar(numStone.stoneBalance);
} else if (numStone.stoneBalance <= 0) {
System.out.println("Game Over\n" + name2 + " wins!\n");
break;
}
// player2's turn and remove the stones; decision of winning
player2.enterName(name2); // pass the name to be used
player2.player2Turn();
int takeStone2 = input.nextInt();
while (takeStone2 > removeUpBound || takeStone2 <= 0) {
System.out.println(
"Invalid, you need to remove stones under upper bound limit or above 0. \n Please enter again.");
takeStone2 = input.nextInt();
}
numStone.removeStones(takeStone2);
if (numStone.stoneBalance > 0) {
System.out.print(numStone.stoneBalance + " stones left:");
numStone.printStar(numStone.stoneBalance);
} else if (numStone.stoneBalance <= 0) {
System.out.println("Game Over\n" + name1 + " wins!\n");
break;
}
}
System.out.println("Do you want to play again (Y/N):");
playOrNot = input.next();
} while (playOrNot.equals("Y"));
}
}
public class NimPlayer {
String player1;
String player2;
int stoneBalance;
int stars;
public void enterName(String name) {
player1 = name;
player2 = name;
}
public void initialStone(int startStones) {
stoneBalance = startStones;
}
public void removeStones(int stonesTaken) {
int updatedBalance = stoneBalance - stonesTaken;
stoneBalance = updatedBalance;
}
public void player1Turn() {
System.out.println(player1 + "'s turn - remove how many?\n");
}
public void player2Turn() {
System.out.println(player2 + "'s turn - remove how many?\n");
}
public void printStar(int star) {
stars = star;
stars = stoneBalance;
for (int stars = 1; stars <= star; stars++) {
System.out.print(" *");
}
System.out.println();
}
}
解决方案
要完全解决您的 2 个问题,我会执行以下操作 -
input.nextLine();
System.out.println("Do you want to play again (Y/N):");
playOrNot = input.nextLine();
代替
System.out.println("Do you want to play again (Y/N):");
playOrNot = input.next();
推荐阅读
- c - 列出目录的内容并检查元素是文件还是目录 (C)
- java - 使用 Spring Data JPA 代替休眠
- python - 名称列表的 Python 文件操作
- sql - 客户排名 SQL Server 脚本
- grpc - gRPC python的级联超时传播
- python - Python 请求库 MultiPart FormData POST 请求问题
- html - 当我使用引导程序的 css 文件时,为什么我不能将导航栏元素浮动到右侧?
- daml - 如何在 DAML 中的函数内断言条件?
- python - 机器学习 CNN:通过位置而非图像本身进行识别
- c++ - 两边都有省略号的 Lambda 包捕获 - 是什么意思?