首页 文章

岩石纸剪刀蜥蜴Spock

提问于
浏览
0

My assignment:

创建一个创建两个HandGamePlayer对象的测试器(人类cpu完全构造函数的默认构造函数),通过询问用户选择符号(现在为1-5),输出两个玩家标志,输出谁赢了来玩3轮 . 一旦完成所有轮次,输出统计数据并宣布总冠军!

一直在这个工作,任何人都可以向我解释如何识别标志符号?我的教授试图向我解释该怎么做,但我只是迷失了......

这就是他所说的,但我甚至不知道这意味着什么:

“符号未在main中声明,因此它表示无法找到该符号 . 您生成了一个手势,但打印出来并没有存储它!而是创建一个int符号;变量并将手势存储在那里(仍然打印出来,但现在你可以在你的多方面使用它,如果/其他)“

查看我的代码,如果你们有任何想法,请告诉我 .

HandGameTester.java

//MAIN
import java.util.Scanner;

public class HandGameTester
{
 public static void main(String[] args)
 {
  Scanner keyboard;

  HandSign hs;
  int sign;
  int handSign;
  int win = 0;
  int loose = 0;
  int tied = 0;
  int loopCount;

  keyboard = new Scanner(System.in);
  hs = new HandSign();
  hs = sign;

  System.out.println("Pick A Choice Below To Play");
  System.out.println("1: Rock");
  System.out.println("2: Paper");
  System.out.println("3: Scissors");
  System.out.println("4: Lizard");
  System.out.println("5: Spock");

  handSign = keyboard.nextInt(); 

  System.out.println("You chose " + handSign);
  hs.printHandSign(hs.getHandSign());

  if(handSign == sign) {
      System.out.println("You tied!");
      tied++;
      loopCount++;
  } else if(handsign == 1 && sign == 2 || sign == 5) {
      System.out.println("You loose!");
      loose++;
      loopCount++;
  } else if(handsign == 1 && sign == 3 || sign == 4) {
      System.out.println("You win!");
      win++;
      loopCount++;
  } else if(handsign == 2 && sign == 1 || sign == 5) {
      System.out.println("You win!");
      win++;
      loopCount++;
  } else if(handsign == 2 && sign == 3 || sign == 2) {
      System.out.println("You loose!");
      loose++;
      loopCount++;
  } else if(handsign == 3 && sign == 2 || sign == 4) {
      System.out.println("You win!");
      win++;
      loopCount++;
  } else if(handsign == 3 && sign == 3 || sign == 5) {
      System.out.println("You loose!");
      loose++;
      loopCount++;
  } else if(handsign == 4 && sign == 2 || sign == 5) {
      System.out.println("You win!");
      win++;
      loopCount++;
  } else if(handsign == 4 && sign == 3 || sign == 4) {
     System.out.println("You loose!");
     loose++;
     loopCount++;
  } else if(handsign == 5 && sign == 1 || sign == 3) {
     System.out.println("You win!");
      win++;
     loopCount++;
  } else if(handsign == 5 && sign == 2 || sign == 4) {
      System.out.println("You loose!");
      loose++;
      loopCount++;
  } else {
      System.out.println("You win!");
      win++;
      loopCount++;
  } if((win > loose) || (win > tied)) {
      System.out.println("You Win Best Out of Three!");
  } else if(tied > win || tied > loose) {
      System.out.println("You Tied!");
  } else if(loose > win || loose > win) {
      System.out.println("You loose!");
  } else if(win == loose || win == tied) {
      System.out.println("You tied!");
  } else {
      System.out.println("You Win Best Out of Three!");
  }
 }
}

HandSign.java

public class HandSign
{
 public static final int ROCK = 1;
 public static final int PAPER = 2;
 public static final int SCISSOR = 3;
 public static final int LIZARD = 4;
 public static final int SPOCK = 5;
 public static int getHandSign();

 { 
  return (int)Math.random() * 5;
 }
 public static int printHandSign(int sign)
 {
  switch(sign)
  {
   case 1:
    System.out.println("Rock");
    return sign;
   case 2:
      System.out.println("Paper");
      return sign;
   case 3:
      System.out.println("Scissor");
      return sign;
   case 4:
      System.out.println("Lizard");
      return sign;
   case 5:
      System.out.println("Spock");
      return sign;
   default:
        System.out.println("Fatal Error");
        System.exit(0);
    }
  }
 }
}

4 回答

  • 0

    代码中有许多错误(但主要是不必要的变量) .

    我想你可以告诉你的教授他或她错了 sign 实际上是 declared, 但是它不是 initialized. 检查你的 main() 方法的开头 . 一行简单地说,

    int sign;

    这是 declaration - 您告诉程序 sign 变量存在 . 但是,你没有把它设置为任何东西 - 你不是 initializing 它 .

    但是,这肯定不是说您的代码没有其他缺陷 .

    首先,如上所述,你从未初始化 sign. 正如你后来将 handSign 设置为等于System.in Scanner的nextInt,我们可以假设 handSign 是用户选择的标志(无论是摇滚,纸张,剪刀,蜥蜴还是spok) . 然后将 handSignsign 进行比较,并说明如果它们彼此相等,那么你就与计算机绑在一起了 . 通过这个我们可以假设 sign 是计算机选择的符号 . 当你的教授告诉你,你没有在 sign 中存储变量时,他已经死了!你宣布了标志,但从未让计算机选择 sign 是什么 - 你从未将它设置为等于任何东西 .

    看看你的HandSign课程 . 您创建了 getHandSign() 方法,该方法返回一个随机值,但您从未调用过该方法!

    其次,你有很多不必要的变量 .

    这是你想要做的:

    在main方法中,去掉 hs 变量 . 为什么?想一想 - 只有两个玩家,所以只有两个标志 . 标志有三个变量 - hs, handSign, and sign . 然后你暗示 handSign 是用户的标志, sign 是你的if语句中的计算机标志 . hs 不仅是不必要的,而且暗示在您的程序中,符号通常是 Integerhs 的类型是 HandSign . 此外,HandSign类中的每个变量和方法都是静态的,这意味着HandSign类的任何实例本质上都是无用的 .

    其次,您在HandSign类中创建了几个常量,但从未使用过它们 . 你可以完全摆脱它们,或者用switch语句中的数字代替常量 . 例如,它说:

    case 1:

    您可以(并且应该)将其更改为:

    case ROCK:

    您可以(并且应该)在HandGameTester main() 方法中的几个if / else语句中执行相同的操作 . (注意,您必须通过HandSign类引用常量 - HandSign.ROCK 等)

    最后,最重要的是,初始化 sign 变量!

    您创建了静态方法,该方法生成1到5之间的随机值,但从未调用它,因此请调用它:

    int sign = HandSign.getHandSign();

    这将调用 getHandSign() 方法并将 sign 设置为等于1到5之间的返回随机值 .

  • 0

    “符号未在main中声明,因此它表示无法找到符号 .

    看起来你添加了 int sign;

    你生成了一个手势,但打印出来并没有存储它!而是做一个int符号;变量并将手势存储在那里(仍然打印出来,但现在你可以在你的多路上使用它,如果/其他)“

    这意味着您有两个 HandSign 变量,一个是您生成的( hs ),另一个是您从用户读入的( sign ) . 但是, sign 是一个int而 hs 不是 . 因此,您需要通过调用 HandSign.getHandSign() 来获取 HandSign 中的int一个来自电脑播放器 .

  • 0

    你永远不记得getHandSign生成的符号 . 你打电话

    hs.printHandSign(hs.getHandSign());
    

    其中打印出计算机生成的符号,但您从未记住变量中的这个符号 .

    你似乎有一个变量,你永远不会给它一个值 .

    int sign; // defaults to zero as you have not given it a value
    ...
    hs = new HandSign();
    hs = sign; // This line wont compile. 
    ...
    if(handSign == sign) { // sign still has no value set so is still the default of zero.
    

    在执行 if...else if... 之前,您应该指定一个值进行签名 . 这个任务看起来应该是这样的

    sign = ????;
    

    将问号替换为有效的整数表达式 .

  • 0

    其他一些海报已经评论过,但我只想加2美分 . 我可以立即看到一些问题 .

    • 主要没有循环(除非我产生幻觉),这意味着只会播放一轮 .

    • 如果打印出计算机的选择,用户界面会很好 .

    • 你错误地将"lose"拼错为"loose",这使代码更难阅读 .

    • 空行显示在错误的位置,或根本不显示,这也使代码难以阅读和调试 .

    • 巨大的问题:(int)Math.random()* 5没有't do what you want it to do. Just create a small program that prints the result of that calculation 10 times and you'我会看到 . 你需要更多的括号,而且你需要加1,因为你开始计数为1而不是0.或者,你可以从0开始计数,而(IMHO)更好 .

    • 使用System.exit(0)时出现致命错误,但如果确实是错误,则参数应为> 0,例如System.exit(1) .

    另外,我同意其他海报 . 但是,它不应该太难修复,真的只需几分钟 . 大部分的辛勤工作都已完成 .

相关问题