当我在游戏中获胜时,为什么我的数字没有加起来?

时间:2014-01-04 20:50:29

标签: java

在我的游戏中,计算机必须生成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);
    }
}

1 个答案:

答案 0 :(得分:2)

例如,您需要检查if((letter==89||letter==121)&&(compcolor1==4)),但绝不会将compcolor1与1与letter2letter3进行比较。因此,如果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语句时,请看一下:
    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++;   
    }