Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带回合和计数器变量的Rockpapergame-java_Java_Loops_If Statement_While Loop - Fatal编程技术网

带回合和计数器变量的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