我的作业:
创建一个测试人员,创建两个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);
}
}
}
}
答案 0 :(得分:0)
您的代码中存在大量错误(但主要是不必要的变量)。
我想你可以告诉你的教授,他或她错了,sign
实际上是声明,但它没有初始化。检查main()
方法的开头。一行简单地说,
int sign;
这是声明 - 您告诉程序sign
变量存在。但是,你并没有将它设置为任何东西 - 你不是初始化它。
但是,这肯定不是说您的代码没有其他缺陷。
首先,正如所述,您从未初始化sign.
当您稍后将handSign
设置为System.in Scanner的nextInt时,我们可以假设handSign
是用户选择的标志(无论是摇滚,纸张,剪刀,蜥蜴还是spok。)然后,您将handSign
与sign
进行比较,并说明如果它们彼此相等,那么您就与计算机绑在一起。通过这个我们可以假设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
不是。因此,您需要通过调用HandSign
从HandSign.getHandSign()
获取一个int来从计算机播放器获取一个。
答案 3 :(得分:0)
其他一些海报已经评论过,但我只是加上我的2美分。我可以立即看到一些问题。
此外,我同意其他海报。但是,它不应该太难修复,真的只需几分钟。大部分的努力都已完成。