Java 石头剪刀布游戏 [关闭]

2023-12-27

我是编程新手,我正在尝试用 Java 编写一个非常简单的石头剪刀布游戏。它将编译并运行良好,但我希望说一些类似“无效的移动。再试一次”之类的内容。或当用户(personPlay)未输入正确的字符(r、p 或 s)时类似的内容。最好的方法是什么?例如,如果您输入“q”,它应该打印“无效移动”。提前非常感谢!

// *************
// Rock.java 
// ************* 

import java.util.Scanner; 
import java.util.Random; 


public class Rock 
{ 
public static void main(String[] args) 
{ 
    String personPlay; //User's play -- "R", "P", or "S" 
    String computerPlay = ""; //Computer's play -- "R", "P", or "S" 
    int computerInt; //Randomly generated number used to determine 
                     //computer's play 
    String response; 


    Scanner scan = new Scanner(System.in); 
    Random generator = new Random(); 

    System.out.println("Hey, let's play Rock, Paper, Scissors!\n" + 
                       "Please enter a move.\n" + "Rock = R, Paper" + 
                       "= P, and Scissors = S.");

    System.out.println();

    //Generate computer's play (0,1,2) 
    computerInt = generator.nextInt(3)+1; 

    //Translate computer's randomly generated play to 
    //string using if //statements 

    if (computerInt == 1) 
       computerPlay = "R"; 
    else if (computerInt == 2) 
       computerPlay = "P"; 
    else if (computerInt == 3) 
       computerPlay = "S"; 


    //Get player's play from input-- note that this is 
    // stored as a string 
    System.out.println("Enter your play: "); 
    personPlay = scan.next();

    //Make player's play uppercase for ease of comparison 
    personPlay = personPlay.toUpperCase(); 

    //Print computer's play 
    System.out.println("Computer play is: " + computerPlay); 


    //See who won. Use nested ifs 

    if (personPlay.equals(computerPlay)) 
       System.out.println("It's a tie!"); 
    else if (personPlay.equals("R")) 
       if (computerPlay.equals("S")) 
          System.out.println("Rock crushes scissors. You win!!");
    else if (computerPlay.equals("P")) 
            System.out.println("Paper eats rock. You lose!!"); 
    else if (personPlay.equals("P")) 
       if (computerPlay.equals("S")) 
       System.out.println("Scissor cuts paper. You lose!!"); 
    else if (computerPlay.equals("R")) 
            System.out.println("Paper eats rock. You win!!"); 
    else if (personPlay.equals("S")) 
         if (computerPlay.equals("P")) 
         System.out.println("Scissor cuts paper. You win!!"); 
    else if (computerPlay.equals("R")) 
            System.out.println("Rock breaks scissors. You lose!!"); 
    else 
         System.out.println("Invalid user input."); 
}

}


我建议制作石头、剪刀、布的物体。这些对象将具有与字符串之间进行转换的逻辑,并且还“知道”什么击败什么。 Java 枚举非常适合此目的。

public enum Type{

  ROCK, PAPER, SCISSOR;

  public static Type parseType(String value){
     //if /else logic here to return either ROCK, PAPER or SCISSOR

     //if value is not either, you can return null
  }
}

The parseType方法可以返回null如果 String 不是有效类型。您的代码可以检查该值是否为空,如果是,则打印“无效重试”并循环返回以重新读取扫描仪。

Type person=null;

 while(person==null){
      System.out.println("Enter your play: "); 
      person= Type.parseType(scan.next());
      if(person ==null){
         System.out.println("invalid try again");
      }
 }

此外,您的类型枚举可以通过让每个类型来确定什么击败什么Type对象知道:

public enum Type{

    //...

    //each type will implement this method differently
    public abstract boolean beats(Type other);


}

每种类型都会以不同的方式实现此方法,看看哪种方法更胜一筹:

ROCK{

   @Override
   public boolean beats(Type other){            
        return other ==  SCISSOR;

   }
}

 ...

然后在你的代码中

 Type person, computer;
   if (person.equals(computer)) 
   System.out.println("It's a tie!");
  }else if(person.beats(computer)){
     System.out.println(person+ " beats " + computer + "You win!!"); 
  }else{
     System.out.println(computer + " beats " + person+ "You lose!!");
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 石头剪刀布游戏 [关闭] 的相关文章

随机推荐

  • 创建一个 N 维数组,其中 N 在运行时确定 (C++)

    我正在将 N 维图像立方体编码为不同的图像格式 我直到运行时才知道图像的尺寸 并且我用来读取原始图像的库需要一个 N 维数组目标缓冲区作为参数 如何在 C 中声明这样的数组 谢谢 简而言之 您不能在 C 中声明这样的数组 数组的维数是类型的
  • IDisposable 实现 - “if(处置)”中应该包含什么内容

    我一直在修复 winforms 应用程序中的一些内存泄漏问题 并注意到一些未明确处理的一次性对象 开发人员尚未调用 Dispose 方法 Finalize 方法的实现也没有帮助 因为它没有进入if disposing 条款 所有的静态事件注
  • 每当 gem 不更新 crontab 任务时

    我一直在 Slicehost 上我 2 岁以上的切片上使用每当宝石 然而我不能在我的新切片上做同样的事情 主要区别在于我现在在 MBP 和切片上运行 RVM 我还运行 Rails 3 我有 Rubygems v 1 5 0 和最新版本的 R
  • 如何检测 iPhone 中的震动方向

    我有一个瓶子的图像 每当用户摇动设备时 我想将该图像朝那个方向移动 例如上 下 左或右 例如 如果用户向左摇动设备 我想向左移动该图像 我可以使用检测震动事件 void motionEnded UIEventSubtype motion w
  • 绘制矩形多维数组

    我目前正在开发库存系统 但是我在弄清楚应该如何绘制它时遇到问题 我有一个矩形数组 如下所示 Rectangle Inventoryslots new Rectangle 24 24 slots 现在我想将插槽绘制为6 4列 宽度为6个插槽
  • 一种更好的算法来查找数字字符串的下一个回文

    首先这里有一个问题 如果从左到右和从右到左读取的正整数在十进制系统中的表示相同 则该正整数称为回文 对于给定的不超过1000000位的正整数K 将大于K的最小回文数的值写入输出 显示的数字始终不带前导零 输入 第一行包含整数 t 即测试用例
  • CSS滑动边框

    感谢 codeSpy 我得到了这个 http jsfiddle net p9tBR http jsfiddle net p9tBR 我不知道如何在更改页面时更改蓝线 例如 如果我在第 2 页 我希望蓝线位于 2 而不是 1 的下方 当我在第
  • 同一目录中的两个不同的 Git 存储库

    我想维护两个不同的 git 存储库 存储库应保留在同一根目录中 如何实现 我想要的是 管理两个略有不同的存储库 我可以在同一目录中有两个完全不同的存储库吗 您可以通过在 git 命令本身上添加使用以下两个选项之一来实现此目的 git wor
  • 如何给UITextView实现搜索功能?

    我有40多个观点 各有各的观点UITexView 我想实现一个搜索功能 允许用户跨域搜索UITextViews 实际上 我什至不知道如何实现 1 的搜索功能UITextView 因此我不知道这是否可能 我已经在网上搜索并在这里寻找它 但没有
  • 锯齿状数组类型属性

    假设我有这样的财产 public int MyProperty get set 调用代码可以自由更改数组的值 而且还可以替换数组本身 通过隐藏设置器可以轻松防止这种情况 如下所示 public int MyProperty get priv
  • 用c++例子解释Facade模式?

    我已经与维基百科文章 http en wikipedia org wiki Facade pattern 并且似乎缺少代码示例的 C 版本 如果没有这个我就无法完全理解 Facade 模式 你能用 C 帮我解释一下吗 外观模式 为复杂的子系
  • 如何将标签添加到 Bootstrap 对话框页脚

    需要添加bootstrap页脚上的标签bootstrap3 dialog 根据本教程 http nakupanda github io bootstrap3 dialog 只能在页脚区域添加按钮 BootstrapDialog show t
  • NPM:找不到模块“uuid”

    当我尝试使用 npm 时 我收到此消息 gt npm module js 472 throw err Error Cannot found module uuid at Function Module resolveFilename mod
  • C# 中的多客户端/服务器聊天程序?

    客户将能够一对一和群组聊天 温和的房间 类似于 Skype 我将使用服务器来授权客户端 我的问题是哪个更好 WCF 或 TCPClient StreamReader 和 StreamWriter cheesr 我还没有使用过 WCF 但我可
  • 如何从 Grails 控制器和视图外部引用 Grails 域类字段?

    我有域类 class Child static hasMany toys Toy String name Set toys class Toy static belongsTo owner Child String name 在我的 JSP
  • 根据部分字符串选择数组键

    我有一个数组 在该数组中我有一个数组键 如下所示 show me 160该数组键可能会发生一些变化 因此有时页面可能会加载 并且数组键可能会发生变化show me 120 我想现在可以只字符串匹配数组键直到最后一个 这样我就可以检查最后一个
  • 从其他文档追加子元素

    在我的程序中 我必须创建一些文档创建器 并且我想将创建元素的功能拆分为多个类 每个类将创建一个元素 主要创建者将通过接口提取该元素并将其附加到主体 问题是我不想将任何参数传递给构造函数调用 例如 creator createDocument
  • window.URL.createObjectURL(blob);在我的应用程序中未定义

    我仅在我的应用程序中遇到此问题 与浏览器 IE 和 Chrome 无关 如果我检查window URL createObjectURL blob 在两个浏览器中任何其他页面的控制台中 其工作正常 但它window URL createObj
  • IntelliJ IDEA 在 JPQL 中突出显示带有“无法解析符号”的 @Entity 类名称

    IntelliJ IDEA 在 JPQL 中用红色突出显示持久的 Entity 类名称 无法解析符号 这会分散注意力并埋葬真正的问题 因此 例如 我在存储库中声明一个查询 private static final String READ B
  • Java 石头剪刀布游戏 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是编程新手 我正在尝试用 Java 编写一个非常简单的石头剪刀布游戏 它将编译并运行良好 但我希望说一些类似 无效的移动 再试一次