Java 石剪蜥蜴
我的作业: 创建一个测试仪,创建两个HandGamePlayer对象(cpu完整构造函数的默认构造函数),通过要求用户选择符号(现在为1-5)玩3轮,输出两个玩家的符号,并输出谁赢。所有回合结束后,输出统计数据并宣布总冠军 整天都在做这件事,有人能给我解释一下如何识别标志符号吗?我的教授试图向我解释该怎么做,但我只是迷路了 这就是他说要做的,但我甚至不知道这是什么意思: 符号未在main中声明,因此它表示找不到符号。您生成了一个手势,但打印出来了,但没有存储它!而是制作一个int-sign;变量并将手势存储在那里(仍然打印出来,但现在您可以以多种方式使用它if/else) 查看我的代码,如果你们有任何想法,请告诉我 HandGameTester.javaJava 石剪蜥蜴,java,Java,我的作业: 创建一个测试仪,创建两个HandGamePlayer对象(cpu完整构造函数的默认构造函数),通过要求用户选择符号(现在为1-5)玩3轮,输出两个玩家的符号,并输出谁赢。所有回合结束后,输出统计数据并宣布总冠军 整天都在做这件事,有人能给我解释一下如何识别标志符号吗?我的教授试图向我解释该怎么做,但我只是迷路了 这就是他说要做的,但我甚至不知道这是什么意思: 符号未在main中声明,因此它表示找不到符号。您生成了一个手势,但打印出来了,但没有存储它!而是制作一个int-sign;变量
//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:
在HandGameTestermain()
方法中的几个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