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

显示胜负关系

东门清夷
2023-03-14

我正在创建一个石头、布、剪刀的游戏,我想让它显示个人的赢、输和平局。

当我运行它时,它总是说我输了。

我认为问题是要增加正确值的if-then语句。

if(ret == 1)//starts the increases of wins and losses
           {
               if(ret != 0)
               {
                   if (ret != 2)
                   {
                    w += 1;
                   }
               }
           }

           if(ret == 0)
           {
               if(ret != 1)
               {
                   if(ret != 2)
                   {
                       l += 1;
                   }
               }
           }

           if(ret == 2)
           {
               if(ret != 1)
               {
                   if(ret != 0)
                   {
                       t += 1;
                   }
               }
           }
public static int winnerRet(char user, char compGuess)// method to determine winner
   {
        int ret = 3;
        if(user == 'R')
        {
            if(compGuess != 'P')
            {
                if(compGuess != 'R')
                {
                    ret = 1;
                }
                ret = 2;
            }
            ret = 0;
        }
        if(user == 'S')
        {
            if(compGuess != 'R')
            {
                if(compGuess != 'S')
                {
                    ret = 1;
                }
                ret = 2;
            }
            ret = 0;
        }
        if(user == 'P')
        {
            if(compGuess != 'S')
            {
                if(compGuess != 'P')
                {
                ret = 1;
                }
                ret = 2;
            }
            ret = 0;
        }
        return ret;
   }//end winnerRet

我认为最后一件事可能是生成计算机选择的方法。

   public static char compChoice()//starts method to generate computure choice
   {
        Random random = new Random();
        int compNum;
        char compGuess = '\0';
        compNum = 1 + random.nextInt(3);
        if (compNum == 1)
        {
            compGuess = 'R';
        }
        if(compNum == 2)
        {   
            compGuess = 'S';
        }
        if(compNum == 3)
        {
            compGuess = 'P';
        }
        return compGuess;
   }//end method compChoice

我该怎么解决这个问题?

共有3个答案

葛嘉悦
2023-03-14

在您的代码中ret=0是if条件的最后一条语句,因此它将始终将ret值分配给0

而不是

if(user == 'R'){
            if(compGuess != 'P')
            {
                if(compGuess != 'R')
                {
                    ret = 1;
                }
                ret = 2;
            }
            ret = 0;
}

使用以下代码

if (user == 'R') {
            ret = 0;
            if (compGuess != 'P') {
                ret = 2;
                if (compGuess != 'R') {
                    ret = 1;
                }
        }
}

对其他两个if条件也使用这种类型的赋值。

通鸿风
2023-03-14

您的错误在winnerRet方法中。此代码:

if(user == 'R')
        {
            if(compGuess != 'P')
            {
                if(compGuess != 'R')
                {
                    ret = 1;
                }
                ret = 2;
            }
            ret = 0;
        }

将始终将ret设置为0。如果逻辑深入到其中一个内部If语句中,ret变量在最后仍然设置为0。我希望这有帮助。

艾子石
2023-03-14

虽然这不是对您的“错误在哪里”问题的直接回答,但我认为您的整个解决方案可以改进。考虑到这一点,我使用了一个游戏枚举和一个测试所有游戏规则的简单函数。我认为以这种方式调试/理解更快。看看它是否对您有帮助:

ENUM:

public enum Play{
    ROCK,PAPER,SCISSORS;
}

函数,如果player1失败,则返回false;如果player1获胜,则返回true:

public boolean play(Play player1, Play player2) throws UnsuportedPlayException{
    // rock wins scissors
    if(player1 == Play.ROCK && player2 == Play.SCISSORS)
        return true;
    if(player2 == Play.ROCK && player1 == Play.SCISSORS)
        return false;

    //rock loses to paper
    if(player2 == Play.ROCK && player1 == Play.PAPER)
        return true;
    if(player1 == Play.ROCK && player2 == Play.PAPER)
        return false;

    //paper loses to scissors
    if(player1 == Play.PAPER && player2 == Play.SCISSORS)
        return false;
    if(player2 == Play.PAPER && player1 == Play.SCISSORS)
        return true;
    throw new UnsuportedPlayException("That play is not yet available.");
}

这个例外是由我创建的,只是为了处理空值,或者如果你决定添加游戏却忘记添加规则(你可能想添加第四种可能的游戏,只是为了好玩)。

异常类:

public class UnsuportedPlayException extends Exception {

    private static final long serialVersionUID = 1L;

    public UnsuportedPlayException() {
        super();
    }

    public UnsuportedPlayException(String message, Throwable cause) {
        super(message, cause);
    }

    public UnsuportedPlayException(String message) {
        super(message);
    }

    public UnsuportedPlayException(Throwable cause) {
        super(cause);
    }
}
 类似资料:
  • 谁能告诉我代码出了什么问题吗?

  • 当产品(和子产品)类别页面和商店页面中的条件标记(是产品类别)同时出现时,我无法应用下面的代码。 希望有人能帮忙。 我的目标:每个产品类别页面(包括家长) 参考代码片段和代码片段

  •  这个世界上的文字类冒险游戏,显示文字方式可以大致分为在对话框内显示和电子小说式全画面窗口(Visual-Novel Type)两种。只是文字显示位置的不同,并没有特别大的差异。以上两种显示方式 KAG 均支持。 两种文字显示方式  此外,也能做到竖行显示。 竖行显示  KAG 默认的设定使用的是横行显示和电子小说式。详细的说明请参考 Config.tjs 。本教程将以使用电子小说式为前提,继续说

  • 本文向大家介绍显示带有负值的MySQL直方图?,包括了显示带有负值的MySQL直方图?的使用技巧和注意事项,需要的朋友参考一下 对于负值,请使用reverse()以及concat()。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 这是对带有负值的直方图的查询- 这将产生以下输出-

  • 我有以下型号: 类类别(models.Model):名称=模型。字符域(最大长度=255) 类元素(models.Model): 课程主题(models.Model): 元素=模型。ForeignKey(元素)name=模型。夏菲尔德(max_length=255) 我基本上需要在category id=1中添加新主题,并只获得属于类别1的élément列表 我在category id=1中创建了

  • 我做了一个桌子预订系统,我想显示预订的桌子,使人们不能选择相同的桌子和相同的时间,但我不确定如何做到这一点。有些词是荷兰语的,随便问吧。 这是在表中显示信息的代码。