在我的游戏中,计算机必须生成4种随机颜色。然后用户可以猜测选项中的4种颜色中的任何颜色。如果用户猜对了3种计算机生成的颜色中的一种,他们得到了一个点。我不知道为什么我的积分没有加起来。
我的代码:
static String word,word2,word3;
static int correct;
public static void main(String[] args)throws IOException {
// TODO code application logic here
//Intialize BufferReader
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
// TODO code application logic here
System.out.println("Guess the blocks\n=================");
System.out.println("Enter your first guess(R,G,B,Y):");
String guess1=br.readLine();
System.out.println("Enter your second guess(R,G,B,Y):");
String guess2=br.readLine();
System.out.println("Enter your third guess(R,G,B,Y):");
String guess3=br.readLine();
System.out.println("Your guess= "+guess1+guess2+guess3);
int compcolor1=color1();
int compcolor2=color2();
int compcolor3=color3();
computerColours( compcolor1,compcolor2,compcolor3);
int letter=guess1.charAt(0);
int letter2=guess2.charAt(0);
int letter3=guess3.charAt(0);
checkColoursCorrect(letter ,letter2,letter3, compcolor1,compcolor2,compcolor3);
}
public static int color1()
{
int randnum=(int) ((Math.random()*4)+1);
return randnum;
}
public static int color2()
{
int randnum=(int) ((Math.random()*4)+1);
return randnum;
}
public static int color3()
{
int randnum=(int) ((Math.random()*4)+1);
return randnum;
}
static void computerColours(int compcolor1,int compcolor2,int compcolor3){
if(compcolor1==1){
word="R";
}
else if(compcolor1==2){
word="G";
}
else if(compcolor1==3){
word="B";
}
else if(compcolor1==4){
word="Y";
}
if(compcolor2==1){
word2="R";
}
else if(compcolor2==2){
word2="G";
}
else if(compcolor2==3){
word2="B";
}
else if(compcolor2==4){
word2="Y";
}
if(compcolor3==1){
word3="R";
}
else if(compcolor3==2){
word3="G";
}
else if(compcolor3==3){
word3="B";
}
else if(compcolor3==4){
word3="Y";
}
System.out.println("Comp guess " +word+word2+word3);
}
static void checkColoursCorrect(int letter ,int letter2,int letter3,int compcolor1,int compcolor2,int compcolor3){
if((letter==114||letter==82)&&(compcolor1==1)){
correct++;
}
if((letter==71||letter==103)&&(compcolor1==2)){
correct++;
}
if((letter==66||letter==98)&&(compcolor1==3)){
correct++;
}
if((letter==89||letter==121)&&(compcolor1==4)){
correct++;
}//guess1
if((letter2==114||letter2==82)&&(compcolor2==1)){
correct++;
}
if((letter2==71||letter2==103)&&(compcolor2==2)){
correct++;
}
if((letter2==66||letter2==98)&&(compcolor2==3)){
correct++;
}
if((letter2==89||letter2==121)&&(compcolor2==4)){
correct++;
}//guess2
if((letter3==114||letter3==82)&&(compcolor3==1)){
correct++;
}
if((letter3==71||letter3==103)&&(compcolor3==2)){
correct++;
}
if((letter3==66||letter3==98)&&(compcolor3==3)){
correct++;
}
if((letter3==89||letter3==121)&&(compcolor3==4)){
correct++;
}
System.out.println("Number of colours correct = "+correct);
}
}
答案 0 :(得分:2)
例如,您需要检查if((letter==89||letter==121)&&(compcolor1==4))
,但绝不会将compcolor1
与1与letter2
或letter3
进行比较。因此,如果compcolor1 ='Y',并且我键入R Y G,那么您的代码将无法检测到它,因为您从未将compcolor1与letter2进行比较。
要使用您的代码实现您想要的效果,您需要将compcolor1不仅与字母进行比较,还要将letter2(仅与compcolor2进行比较)和letter3(仅与compcolor3进行比较)进行比较。所以基本上,将所有的compcolors与所有字母进行比较。
关于编写清洁代码的一些提示:
将char与十进制值进行比较绝对没有意义,因为它使代码更难以阅读。请注意,if(letter == 89)
提供与if(letter = 'Y')
完全相同的结果,代码更清晰。
如果您将字母(或compcolor)与许多常量值进行比较,您可以将if系列更改为switch语句:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html。这也可能为您的代码增加一些清晰度。
所有color
方法(color1,color2,color3)都返回一个随机int。您可以使用一种方法color
,其逻辑与您拥有的三种方法中的任意一种相同。何时指定int
int compcolor1=color();
int compcolor2=color();
int compcolor3=color();
每个作业都会单独调用color(),所以无论如何都会得到三个随机数,代码少得多=错误的地方少,代码更容易理解。
if((letter2==114||letter2==82)&&(compcolor2==1)){ correct++; } //if letter is one of above, then the code below is 100% not true, so place an else: else if((letter2==71||letter2==103)&&(compcolor2==2)){ correct++; }