当前位置: 首页 > 知识库问答 >
问题:

必须反复提交用户选择

晏华奥
2023-03-14

嘿,伙计们,在一个多部分的问题上遇到了一些麻烦。我试图得到一个石头剪刀布游戏,当我试图测试代码使用游戏方法我必须输入我的选择一遍又一遍,然后它只是打印出平局,你是赢家,电脑是赢家一遍又一遍,有人能告诉我我哪里出错了吗?

import java.util.Scanner;
import java.util.Random;
/**
 * A class that will play a game of rock paper scissors.
 *
 * @author (your name)
 * @version (a version number or a date)
 */

public class RockPaperScissors
{
    private Scanner reader;
    private int yourScore;
    private int computerScore;
    private Random ran = new Random();

    public RockPaperScissors()
    {
        reader = new Scanner(System.in);
        yourScore = 0;
        computerScore=0;
        Random ran = new Random(); 
    }

    public void printPrompt()
    {
        System.out.println("Enter your choice, paper, rock or scissors >"); 
        String userChoice = userChoice();
        System.out.println();
        System.out.println();
        System.out.println("Enter your choice, paper, rock or scissors  >"+ userChoice);
    }

    public final String userChoice()
    {
        String userChoice= reader.next();
        return userChoice;
    }

    public String computerChoice()
    {
        String compMove = ("");
        int cpuChoice = ran.nextInt(3);
        switch(cpuChoice)
        {
            case 0:
            {
                compMove = ("rock");
                break;
            }
            case 1:
            {
                compMove = ("paper");
                break;
            }
            case 2:
            {
                compMove = ("scissors");
                break;
            }

        }
        return (compMove);
    }

    public String findWinner(String yourChoice, String computerChoice) 
    {
        yourChoice = userChoice();
        computerChoice = computerChoice();
        String Winner= null;

        if (yourChoice.equals(computerChoice))
        {
            Winner = ("draw");
        }
        if (yourChoice.equals("rock")) 
        {
            if (computerChoice.equals("paper")) 
            {
                computerScore++;
                Winner = ("computer");

            }
            else if (computerChoice == "scissors")
            {
                yourScore++;
                Winner = ("you");

            }
        }
        if (yourChoice.equals("paper"))
        {
            if (computerChoice.equals("scissors"))
            {
                computerScore++;
                Winner = ("computer");

            }
            else if (computerChoice.equals("rock")) 
            {
                yourScore++;
                Winner = ("you");

            }
        }
        if (yourChoice.equals("scissors"))
        {
            if (computerChoice.equals("rock"))
            {
                computerScore ++;
                Winner = ("computer");

            }
            else if (computerChoice.equals("paper"))
            {
                yourScore++;
                Winner = ("you");

            }
        }
        if (!yourChoice.equals("rock||paper||scissors")) 
        {
            computerScore++;
            Winner = ("computer");

        }

        return Winner;
    }

    public void playRound()
    {
        printPrompt();
        String computerChoice=computerChoice();
        String userChoice=userChoice();
        System.out.println("You have chosen " + userChoice + " and the computer has chosen " + computerChoice);
        String findWinner = findWinner(computerChoice,userChoice);
        
        {
            if (findWinner.equals("draw"));
            System.out.println("This game is a draw");
            if (findWinner.equals("you"));
            System.out.println("You are the winner");
            if (findWinner.equals("computer"));
            System.out.println("The computer is the winner");
        }
        System.out.println("You have " + yourScore + "and the computer has "+ computerScore);
    }
}

共有1个答案

苏雅珺
2023-03-14

if语句末尾的分号表示if语句为CONLETE。紧接在if语句之后的行是独立的,它们不属于if语句...这就是为什么它们总是运行。

改变:

if (findWinner.equals("draw"));
System.out.println("This game is a draw");

致:

if (findWinner.equals("draw"))
    System.out.println("This game is a draw");

或者更好:

if (findWinner.equals("draw")) {
    System.out.println("This game is a draw");
}

有没有什么建议可以帮我保存我最初的选择,这样我就不用一直输入了?

findWinner()中,您再次调用userChoice()computerChoirce()。此时,这些值已经存在于传入的参数中,因此您不需要这些值。将其注释掉或删除:

public String findWinner(String yourChoice, String computerChoice) 
{
    // You don't need these two lines:
    //yourChoice = userChoice();
    //computerChoice = computerChoice(); 

    // ... other existing code ...
}

然后,在play圆桌会议()中,调用printPrompt()userChoice(),它们都有自己的输入机制:

printPrompt();
String computerChoice=computerChoice();
String userChoice=userChoice();
System.out.println("You have chosen " + userChoice + " and the computer has chosen " + computerChoice);

我会去掉printPrompt(),然后做:

// printPrompt();
String computerChoice=computerChoice();
System.out.print("Enter your choice, paper, rock or scissors >"); 
String userChoice=userChoice();
System.out.println("You have chosen " + userChoice + " and the computer has chosen " + computerChoice);

findwiner()中有一些逻辑错误。这并不像你想象的那样:

if (!yourChoice.equals("rock||paper||scissors")) 
{
    computerScore++;
    Winner = ("computer");
}

我认为你想做的是让计算机获胜,如果用户不输入“石头”、“纸”或“剪刀”?如果是这样,请将您的if语句更改为sterif语句,并添加最终的ster块:

public String findWinner(String yourChoice, String computerChoice) 
{
    String Winner = "";

    if (yourChoice.equals(computerChoice))
    {
        Winner = "draw";
    }
    else if (yourChoice.equals("rock")) 
    {
        if (computerChoice.equals("paper")) 
        {
            computerScore++;
            Winner = "computer";

        }
        else if (computerChoice.equals("scissors"))
        {
            yourScore++;
            Winner = "you";

        }
    }
    else if (yourChoice.equals("paper"))
    {
        if (computerChoice.equals("scissors"))
        {
            computerScore++;
            Winner = "computer";

        }
        else if (computerChoice.equals("rock")) 
        {
            yourScore++;
            Winner = "you";

        }
    }
    else if (yourChoice.equals("scissors"))
    {
        if (computerChoice.equals("rock"))
        {
            computerScore ++;
            Winner = "computer";

        }
        else if (computerChoice.equals("paper"))
        {
            yourScore++;
            Winner = "you";

        }
    }
    else // user did not type "rock", "paper", or "scissors"!
    {
        computerScore++;
        Winner = ("computer");

    }

    return Winner;
}

最后,主要的错误是,在调用findwiner()时交换了参数的顺序。

改变:

String findWinner = findWinner(computerChoice, userChoice);

致:

String findWinner = findWinner(userChoice, computerChoice);

希望有帮助!

 类似资料:
  • 问题内容: 我正在尝试将Stripe集成到我的购物车项目中。我无法提交结帐表格。我不断收到此错误消息:“必须提供来源或客户。” 我没有正确设置我的Stripe帐户,或者我的JavaScript中缺少某些参数。我已经花了几个小时解决这个问题,但仍然无法解决。 这来自Stripe的日志: 解析的请求POST正文 反应体 这是我的app.js 这是我的index.js: 这是我的checkout.js:

  • 问题内容: 我正在尝试使用机械化提交表单,但遇到了错误(TypeError:ListControl,必须设置顺序)。在谷歌搜索了一段时间并尝试了几种不同的解决方案后,我无法解决该问题。我正在尝试提交所有字段。 通过机械化获取的表单数据(对于br.forms()打印中的f:f) 我当前的代码 请您协助并检查我是否为表单选项使用了正确的语法。谢谢 问题答案: 栏位会要求您提供整数清单,但您只提供一个整

  • 我正在使用multer和cloudinary构建一个图像上传应用程序。我已经使用dotenv正确配置了环境变量。然而,当我尝试使用Cloudinary上传文件时,我得到了错误“必须提供api_密钥”。 Cloudinary API凭据的提供和配置正确,如下代码所示: 阴云密布。js 埃文先生 这个env文件在我的应用程序中也是正确必需的。js文件: app.js 如果我在cloudinary.js

  • 问题内容: 我正在尝试达到类似于37signals的ta-da列表的效果-我希望我的用户仅通过选中“完成”框即可从列表中检查项目- 换句话说,表单已提交到服务器在复选框上。有谁知道涵盖此类内容的教程,或者可以为我指明正确的方向? 谢谢罗布 问题答案: 如果我正确理解您的问题: 您可以使用jQuery和AJAX完成此操作。在第一个示例中,我无需提交整个表单,而仅提交复选框的值: 大概您会在服务器端处

  • 问题内容: 我有6个选项,我想获取选中的值以将它们存储在第二页的变量中。我该怎么做呢? 和页面: 如果我删除,我会打开颜色,当我这样做时会收到一条通知,说: 数组到字符串的转换 我想要的是选中复选框的值,因此我可以将其存储在变量中。 问题答案: 我最喜欢的一种好方法,我敢肯定,很多人都会利用它来输出您选择的每种颜色,并在屏幕上彼此下方显示。 在使用复选框时,您别无选择,只能使用,这就是为什么只从数

  • 问题内容: 大家好,我有一个联系表格,验证码在那里。提交表格后,我想保留支票。我发布了文本框值,它显示正确,但复选框不起作用。这是我的代码。 提交表格后如何保留复选框? 问题答案: 更改 至 这将使复选框保持选中状态。