岩石纸剪刀蜥蜴Spock

时间:2015-04-08 02:35:11

标签: java

我的作业:

创建一个测试人员,创建两个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 :(得分:0)

您的代码中存在大量错误(但主要是不必要的变量)。

我想你可以告诉你的教授,他或她错了,sign实际上是声明,但它没有初始化。检查main()方法的开头。一行简单地说,

int sign;

这是声明 - 您告诉程序sign变量存在。但是,你并没有将它设置为任何东西 - 你不是初始化它。

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

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

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

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

这是你想要做的:

在main方法中,删除hs变量。为什么?想一想 - 只有两个玩家,所以只有两个标志。标志有三个变量 - hs, handSign, and sign。然后,您暗示handSign是用户的标志,sign是计算机在if语句中的标志。 hs不仅是必要的,而且暗示在您的计划中,标志通常为Integer,而hs属于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之间的返回随机值。

答案 1 :(得分: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 = ????;

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

答案 2 :(得分:0)

  

"符号未在main中声明,因此它表示无法找到该符号。

看起来你添加了这个         int sign;

  

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

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

答案 3 :(得分:0)

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

  • 主要没有循环(除非我是幻觉),这意味着 只打一轮。
  • 如果您打印出计算机的选择,那么用户界面会很好。
  • 你拼错了#34;输了" as"松散"这使代码更难 读取。
  • 空白行显示在错误的位置,或者根本不显示 使代码难以阅读和调试。
  • 巨大的问题:(int)Math.random()* 5没有做你想要的 做。只需创建一个打印结果的小程序 计算10次,你会看到。你还需要更多括号 你需要加1,因为你开始计数为1而不是0。 或者,您可以从0开始计数,而(IMHO)是 更好。
  • 使用System.exit(0)时出现致命错误,但如果确实如此 参数应该是一个错误> 0,例如,System.exit(1)。

此外,我同意其他海报。但是,它不应该太难修复,真的只需几分钟。大部分的努力都已完成。