带回合和计数器变量的Rockpapergame-java
我正在创建一个具有以下要求的岩石纸项目:带回合和计数器变量的Rockpapergame-java,java,loops,if-statement,while-loop,Java,Loops,If Statement,While Loop,我正在创建一个具有以下要求的岩石纸项目: 连续玩几轮石头、布、剪刀,直到其中一名玩家赢了三轮。在这一点上,程序输出获胜者和他们赢得比赛的回合数。如果10轮后没有赢家,比赛将宣布平局 似乎缺少了一些我不太能理解或注意到的东西。我如何在回合结束后停止比赛并宣布获胜 注意:不允许使用数组、扫描器以外的外部库或任何内置java方法 这是我的尝试: import java.util.Scanner; public class Rockpaper{ public static void main(Str
连续玩几轮石头、布、剪刀,直到其中一名玩家赢了三轮。在这一点上,程序输出获胜者和他们赢得比赛的回合数。如果10轮后没有赢家,比赛将宣布平局
似乎缺少了一些我不太能理解或注意到的东西。我如何在回合结束后停止比赛并宣布获胜 注意:不允许使用数组、扫描器以外的外部库或任何内置java方法 这是我的尝试:
import java.util.Scanner;
public class Rockpaper{
public static void main(String[]args){
Scanner keyboard = new Scanner(System.in);
String player1 = keyboard.next();
String player2 = keyboard.next();
String player = "Player1";
int round = 1;
boolean go = true;
boolean win = false;
while(go){
if (player1.equals("r") && player2.equals("p")){
win = true;
}
else if (player1.equals("p") && player2.equals("r")){
win = true;
}
else if (player1.equals("p") && player2.equals("s")){
win = true;
}
else if (player1.equals("s") && player2.equals("p")){
win = true;
}
else if (player1.equals("s") && player2.equals("r")){
win = true;
}
else if (player1.equals("r") && player2.equals("s")){
win = true;
}
else if (player1.equals("r") && player2.equals("r")){
win = false;
}
else if (player1.equals("p") && player2.equals("p")){
win = false;
}
else if (player1.equals("s") && player2.equals("s")){
win = false;
}
if (round < 5){
System.out.println(win+" after "+round+" rounds!");
go = false;
}else{
System.out.println("Tie - No winner after "+round+" rounds!");
}
if (player.equals("Player1"){
Player = "Player2";
}else{
Player = "Player1";
}
}
}
}
import java.util.Scanner;
公营石板纸{
公共静态void main(字符串[]args){
扫描仪键盘=新扫描仪(System.in);
String player1=键盘.next();
String player2=键盘.next();
弦乐演奏者=“演奏者1”;
整数轮=1;
布尔go=true;
布尔赢=假;
while(go){
如果(播放者1等于(“r”)&播放者2等于(“p”)){
赢=真;
}
否则,如果(玩家1.等于(“p”)&玩家2.等于(“r”)){
赢=真;
}
否则如果(玩家1.相等(“p”)和玩家2.相等(“s”)){
赢=真;
}
否则,如果(玩家1.等于(“s”)&玩家2.等于(“p”)){
赢=真;
}
否则,如果(玩家1.相等(“s”)&玩家2.相等(“r”)){
赢=真;
}
否则如果(玩家1.相等(“r”)&玩家2.相等(“s”)){
赢=真;
}
else if(player1.equals(“r”)&player2.equals(“r”)){
赢=假;
}
否则,如果(玩家1.相等(“p”)&玩家2.相等(“p”)){
赢=假;
}
否则,如果(玩家1.相等(“s”)&玩家2.相等(“s”)){
赢=假;
}
if(四舍五入){
System.out.println(在“+轮数+”轮数之后赢+”);
go=假;
}否则{
System.out.println(“平局-在“+轮+”轮之后没有赢家!”);
}
如果(玩家相等(“玩家1”){
Player=“Player2”;
}否则{
Player=“Player1”;
}
}
}
}
我看到的问题是,需要有一个单独的变量来计算每个获胜的可能性,例如,“win1”将计算玩家1获胜的可能性,“win2”将计算玩家2获胜的可能性。我不太确定最初开始计算最多10轮的轮数变量。
输入/输出示例:
当前,在循环之前,仅读取一次输入:
String player1 = keyboard.next();
String player2 = keyboard.next();
//comment/remove these
//String player1 = keyboard.next();
//String player2 = keyboard.next();
//inside the loop
while(go){
String player1 = keyboard.next();
String player2 = keyboard.next();
if (player1.equals("r") && player2.equals("p")){
/* rest of your code */
}
每场比赛结束后,你应该询问球员是否应该继续比赛。如果是,那么你必须再次询问他们的输入。也就是说,只需将“playerX”变量声明和初始化移动到循环中:
String player1 = keyboard.next();
String player2 = keyboard.next();
//comment/remove these
//String player1 = keyboard.next();
//String player2 = keyboard.next();
//inside the loop
while(go){
String player1 = keyboard.next();
String player2 = keyboard.next();
if (player1.equals("r") && player2.equals("p")){
/* rest of your code */
}
此外,本节:
if (round < 5){
System.out.println(win+" after "+round+" rounds!");
go = false;
}else{
System.out.println("Tie - No winner after "+round+" rounds!");
}
if (player.equals("Player1"){
Player = "Player2";
}else{
Player = "Player1";
}
}
您可以进一步改进代码:
- 使用更多方法简化
方法中的代码main
- 由于主循环更多地依赖于计数器而不是布尔标志,因此可以对循环使用
,而不是
while
- 您可以要求用户输入玩家的姓名
- 您可以创建一个类来封装玩家的数据:姓名、当前移动、获胜次数
String player1 = keyboard.next();
String player2 = keyboard.next();
//comment/remove these
//String player1 = keyboard.next();
//String player2 = keyboard.next();
//inside the loop
while(go){
String player1 = keyboard.next();
String player2 = keyboard.next();
if (player1.equals("r") && player2.equals("p")){
/* rest of your code */
}
每场比赛结束后,你应该询问球员是否应该继续比赛。如果是,那么你必须再次询问他们的输入。也就是说,只需将“playerX”变量声明和初始化移动到循环中:
String player1 = keyboard.next();
String player2 = keyboard.next();
//comment/remove these
//String player1 = keyboard.next();
//String player2 = keyboard.next();
//inside the loop
while(go){
String player1 = keyboard.next();
String player2 = keyboard.next();
if (player1.equals("r") && player2.equals("p")){
/* rest of your code */
}
此外,本节:
if (round < 5){
System.out.println(win+" after "+round+" rounds!");
go = false;
}else{
System.out.println("Tie - No winner after "+round+" rounds!");
}
if (player.equals("Player1"){
Player = "Player2";
}else{
Player = "Player1";
}
}
您可以进一步改进代码:
- 使用更多方法简化
方法中的代码main
- 由于主循环更多地依赖于计数器而不是布尔标志,因此可以对循环使用
,而不是
while
- 您可以要求用户输入玩家的姓名
- 您可以创建一个类来封装玩家的数据:姓名、当前移动、获胜次数
round
,而是在条件下使用其值,if(round<5)
,如果round
的值未增加,该条件将始终计算true
p
r
r
s
s
s
r
r
p
r
Player1 wins after 5 rounds!
p
p
p
r
r
r
s
s
p
p
s
s
s
s
p
p
r
p
s
p
Tie - No winner after 10 rounds!
代码的问题:
round
,而是在条件下使用其值,if(round<5)
,如果round
的值未增加,该条件将始终计算true
p
r
r
s
s
s
r
r
p
r
Player1 wins after 5 rounds!
p
p
p
r
r
r
s
s
p
p
s
s
s
s
p
p
r
p
s
p
Tie - No winner after 10 rounds!
我看不出你在使用
键盘
变量。你在哪里声明和更新播放器1
?另外,当有人赢了退出while循环时,你能不能不中断或将go
变量设置为false?我看不出有必要it@user是的,你可以这样做,那么谁是玩家,只是使用随机值的计算机?我不知道我看不出你在使用键盘
变量。你在哪里声明和更新播放器1
?还有,当有人赢了退出while循环时,你能不能把go
变量设为false?我看不出有必要这样做it@user是的,你可以这样做,那么谁是玩家,只是使用随机值的计算机?谢谢你的帮助您的帮助但如果我不被允许切换和您使用的“案例”我将用什么替换它?使用普通if/else
代替。谢谢您的帮助,但是如果我不被允许切换和您使用的“案例”我将用什么替换它?使用普通if/else
代替。Hel