【问题标题】:Cows and Bulls game奶牛和公牛比赛
【发布时间】:2013-02-21 17:11:07
【问题描述】:

我正在开发一个包含两个不同类别的牛和公牛游戏: 第一堂课看起来像这样: 导入 java.util.*; 导入 java.util.Scanner;

public class CowsAndBulls  {

    int UserNumber=0; 
    int CompNumber=0;
    int bulls=0; 
    int cows=0;
    Scanner input = new Scanner(System.in); 

    public void getUserNumber() { 
    System.out.println("Please enter your guess!");
    int UserValue=input.nextInt();
    UserNumber=UserNumber+ UserValue;
    System.out.println("Your guess is  : " + UserNumber);
    } 



    public void getCompNumber() { 
        Random generator= new Random();
        int pickedNumber=generator.nextInt(10000) + 1000;
        CompNumber =CompNumber+ pickedNumber;
        System.out.println("The computer has guessed : " + CompNumber );
    }   
}

它只是为计算机生成一个随机数并要求用户输入他们的猜测。 我的游戏课遇到了很多麻烦,具体来说,我无法让我的 while 循环运行,

public class CowsAndBullsPlay {

    public void play() {

    int GuessCount=0; 
    int UserNumber = 0;
    int CompNumber = 0;
    int cows = 0; 
    int bullcount=0;
    int cowcount=0;
    int bulls = 0; 
    Boolean GameEnds; 
    GameEnds=false;

        while (GameEnds=false) { 
            CowsAndBulls user= new CowsAndBulls(); 
            user.getUserNumber(); 
            CowsAndBulls comp= new CowsAndBulls(); 
            comp.getCompNumber();

            String UserString=String.valueOf(UserNumber); 
            String CompString=String.valueOf(CompNumber);
            String U=UserString;
            String C=CompString;
            for (int i=0; i<4; i++)
            for (int k=i+1; k<4; k++) {
                    if(U.charAt(i)==C.charAt(k)) {
                        bullcount ++; 
                        bulls=bulls + bullcount;
                    }   



                else if(U.contains(C.charAt(i) + U)) {      
            //for (int v=0; v<4; v++)
            //for (int j=0; j<4; j++) {
                        cowcount ++; 
                        cows=cows + cowcount;
                    }
                    GuessCount++;
            }   
            if (bulls==4) { 
                GameEnds= true; 
                System.out.println("Congratulations!");
                System.out.println("it took you:" + GuessCount);
            } 
            else { 
                System.out.println("cows: " + cows); 
                System.out.println("Bulls:" + bulls);
            }   

        } 
    }
}   

它应该检查奶牛然后检查公牛,然后如果公牛不等于四,循环应该重复——调用前两个方法,要求用户输入并要求计算机随机生成一个数字,然后guesscount 应该跟踪循环迭代。

代码可以编译,但不会运行 while 循环

这是我的测试类:

public class CowsAndBullsTester { 

public static void  main(String[] args) {

    int bears = 0;
    int cows = 0;
    Boolean GameEnds = false;

     System.out.println("welcome to Cows Versus Bulls death match!");
     CowsAndBulls user= new CowsAndBulls (); 
     user.getUserNumber(); 

     System.out.println("Now the computer will pick a number!");
     CowsAndBulls comp= new CowsAndBulls (); 
     comp.getCompNumber(); 

     System.out.println("Let's see how you did!");
     CowsAndBullsPlay game= new CowsAndBullsPlay();
     game.play(); 
    }
}

非常感谢任何帮助。我确定有一些愚蠢的错误,我只是不确定是什么。这只是我的第三个任务,我很难自己找出问题所在:)

谢谢!

【问题讨论】:

    标签: java while-loop boolean


    【解决方案1】:

    您需要将while (GameEnds=false) 更改为while (GameEnds==false)

    第一个是赋值,第二个是比较。因此,首先,false 将分配给 GameEnds,然后 GameEnds 将根据您的 while 条件计算为 false,这意味着循环永远不会进入。

    另外,请参阅下面的@AndrewMao 评论。通常,您会看到booleans 直接用在条件中,有或没有否定(!),因为它们已经拥有真值,进一步比较是多余的。


    小注:为了清楚起见,您可能希望在 camelCase 中重命名变量。

    【讨论】:

    • 更好的是,只需while(!GameEnds)
    • 谢谢!! while 循环现在正在运行,但是我在游戏类中遇到了字符串索引超出范围的异常: if(U.charAt(i)==C.charAt(k)) 。为什么会出错?肯定是索引有问题,但是看不到什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 2020-05-12
    • 2019-12-19
    • 2011-12-04
    • 2012-07-27
    • 1970-01-01
    相关资源
    最近更新 更多