Java 石剪蜥蜴

Java 石剪蜥蜴,java,Java,我的作业: 创建一个测试仪,创建两个HandGamePlayer对象(cpu完整构造函数的默认构造函数),通过要求用户选择符号(现在为1-5)玩3轮,输出两个玩家的符号,并输出谁赢。所有回合结束后,输出统计数据并宣布总冠军 整天都在做这件事,有人能给我解释一下如何识别标志符号吗?我的教授试图向我解释该怎么做,但我只是迷路了 这就是他说要做的,但我甚至不知道这是什么意思: 符号未在main中声明,因此它表示找不到符号。您生成了一个手势,但打印出来了,但没有存储它!而是制作一个int-sign;变量

我的作业:

创建一个测试仪,创建两个HandGamePlayer对象(cpu完整构造函数的默认构造函数),通过要求用户选择符号(现在为1-5)玩3轮,输出两个玩家的符号,并输出谁赢。所有回合结束后,输出统计数据并宣布总冠军

整天都在做这件事,有人能给我解释一下如何识别标志符号吗?我的教授试图向我解释该怎么做,但我只是迷路了

这就是他说要做的,但我甚至不知道这是什么意思:

符号未在main中声明,因此它表示找不到符号。您生成了一个手势,但打印出来了,但没有存储它!而是制作一个int-sign;变量并将手势存储在那里(仍然打印出来,但现在您可以以多种方式使用它if/else)

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

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);
    }
  }
 }
}
代码中有许多错误(但大多数是不必要的变量)

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

int符号

这是一个声明——您告诉程序
符号
变量存在。但是,您没有将其设置为任何值—您没有初始化它

然而,这并不是说您的代码没有其他缺陷

首先,如上所述,您从未初始化过
符号。
当您稍后将
手签
设置为等于系统的下一个点时。在扫描仪中,我们可以假设
手签
是用户选择的符号(石头、布、剪刀、蜥蜴或斯波克)。然后将
手签
符号
进行比较,并声明,如果它们相等,那么你就和电脑打成平局。由此,我们可以假设
符号
是计算机选择的符号。当你的教授告诉你你没有在
符号
中存储变量时,他完全正确!您声明了符号,但从未让计算机选择什么是
符号
——您从未将其设置为任何值

看看你的手语课。您创建了返回随机值的
getHandSign()
方法,但从未调用过该方法

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

以下是您想要做的:

在main方法中,去掉
hs
变量。为什么?想想看,只有两名球员,所以只有两个迹象。符号有三个变量--
hs、handSign和sign
。然后,在if语句中,您暗示
handSign
是用户的签名,
sign
是计算机的签名
hs
不仅是不必要的,而且意味着在您的程序中,符号通常是
整数
,而
hs
手签
类型。此外,HandSign类中的每个变量和方法都是静态的,这意味着HandSign类的任何实例本质上都是无用的

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

案例1:

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

case ROCK:

在HandGameTester
main()
方法中的几个if/else语句中,您可以(也应该)做同样的事情。(请注意,您必须通过HandSign类--
HandSign.ROCK
等引用常量。)

最后,也是最重要的,初始化
符号
变量

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

int-sign=HandSign.getHandSign()


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

您从未记住过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 = ????;
将问号替换为有效的整数表达式

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

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

您生成了一个手势,但打印出来了,但没有存储它!而是生成了一个int-sign;变量并将手势存储在那里(仍然打印出来,但现在您可以在if/else中使用它)


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

其他一些海报已经发表了评论,但我只需添加我的2美分。有几个问题我可以马上看到

  • main中没有循环(除非我产生幻觉),这意味着 只进行一轮比赛
  • 如果您打印出计算机的选择,用户界面会很好
  • 你把“lose”拼错为“loose”,这使t