【问题标题】:Rock Paper Scissors Program剪刀石头布计划
【发布时间】:2015-09-22 23:58:42
【问题描述】:

我必须为我的班级制作一个非常简单的石头、纸、剪刀游戏。我通常对这些任务很满意,但我已经在这个特定的任务上工作了大约 8 个小时,我知道它不应该花这么长时间,而且我必须遗漏一些东西。

我们正处于课程的早期阶段,我想确保我正确地完成了作业。我们已经讨论过整数、双精度、布尔表达式、字符和字符串。我们刚开始使用 if 和 else if 语句,所以我想避免实现我们尚未在课堂上介绍的技术。

import java.util.Scanner;
public class RPSFinal {

    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        String user;
        char R, P, S;
        R = '1';
        P = '2';
        S = '3';
        int compInt = (int) (3*Math.random())+1;
        System.out.print("Rock, Paper, Scissors-Enter a choice R/P/S: ");
        user = keyboard.nextLine();
        user = user.toUpperCase();
        char chUser = user.charAt(0);   

        if (chUser == compInt)
        {
            System.out.println("We chose the same item-try again");
        }
        else if (chUser == R)
        {
            if (compInt == P)
                System.out.println("1");
            else if (compInt == S)
                System.out.println("2");
        }
        else if (chUser == P)
        {
            if (compInt == R)
                System.out.println("3");
            else if (compInt == S)
                System.out.println("4");
        }
        else if (chUser == S)
        {
            if (compInt == R)
                System.out.println("5");
            else if (compInt == P)
                System.out.println("6");
        }
        else
            System.out.println("User error.");
    }
}

编辑

我不确定我需要做什么才能使程序正常运行。每次我输入 r、p 或 s 时,程序只会返回“用户错误”。

【问题讨论】:

  • 你的问题是什么?
  • 如果您正在寻找代码审查,您可以考虑使用CodeReview
  • 我只是想指出您正在提示用户输入“R”、“P”或“S”,但是将他们的选择与“1”、“2”和“3”进行比较'。
  • 我不确定我需要做什么才能让程序正常工作。每次我输入 r、p 或 s 时,程序只会返回“用户错误”
  • 更改此设置的最简单方法是建议用户输入整数而不是字符 (System.out.print("Rock, Paper, Scissors-Enter a choice 1 (=R) / 2 (=P) / 3 (=S): ");)。

标签: java


【解决方案1】:

每次用户输入 'R''P''S',您都在将该字符与 命名 RPS 的变量进行比较,其中包含分别为'1''2''3'的字符值。

因此,它们永远不会相等,并且您总是会收到用户错误消息。

您需要更改提示以明确用户需要输入数字,或者您需要更改比较逻辑。

此外,即使已修复,您也将计算机的随机移动存储为 int,但尝试将其与 char 值进行比较以获得结果。

我建议创建一个chComp 变量来存储计算机移动的字符表示,以便一切都保持一致:

    char chComp = 0;
    if (compInt == 1) {
        chComp = 'R';
    } else if (compInt == 2) {
        ...
    } //etc

然后您可以完全放弃RPS 变量并直接进行字符比较:

    if (chUser == chComp) {
        System.out.println("We chose the same item-try again");
    } else if (chUser == 'R') {
        if (chComp == 'P')
            System.out.println("1");
        else if (chComp == 'S')
            System.out.println("2");
    ...

【讨论】:

  • 我去掉了 R、P 和 S 变量并更改了我的代码以更好地匹配您提供的信息。我现在唯一遇到的问题是一个错误,指出“局部变量 chComp 可能尚未初始化”。我不确定如何初始化它。感谢您快速而有帮助的回复,非常感谢他们
  • 计算机的选择也可以单行选择:char chComp = Arrays.asList('R', 'P', 'S').get(new Random().nextInt(3));(使compInt变得多余)。
  • @azurefrog 成功了,你为我省去了很多麻烦。我没有将值更改为 null,而是将其更改为 0,效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
  • 2017-02-10
  • 2016-01-16
相关资源
最近更新 更多