街头篮球吧 关注:781,092贴子:35,694,566

java程序猿带你走进天游的算法世界(猜数字)

只看楼主收藏回复

本人java程序猿一枚,最近天游出了一个猜数字游戏,闲来无趣,写了一个java版本猜数字小游戏


IP属地:陕西1楼2016-09-30 16:09回复
    public class GuessedNumber {
    private int[] guessNumber=new int[4];
    public int[] getGuessNumber() {
    return guessNumber.clone();
    }
    //构造方法,构造时就生成了一个随机的四个数并存入数组
    public GuessedNumber(){
    for(int i=0;i<4;i++){
    boolean boo=true;
    int j=(int)(Math.random()*10);
    for(int n=0;n<i;n++){
    if(j==guessNumber[n]){
    boo=false;
    break;
    }
    }
    if(boo){
    guessNumber[i]=j;
    }else{
    i--;
    }
    }
    }
    }


    IP属地:陕西2楼2016-09-30 16:09
    回复


      来自Android客户端5楼2016-09-30 16:10
      回复
        import java.util.Scanner;
        import java.util.regex.Pattern;
        public class Game {
        private int[] guessedNum;
        private int[] scanNumber=new int[4];
        private Scanner scan=new Scanner(System.in);
        //游戏流程,外部只能通过此方法来进行游戏
        public void gameRun(){
        welcome();
        while(true){
        this.guessedNum=new GuessedNumber().getGuessNumber();
        System.out.println(guessedNum[0]+""+guessedNum[1]+""+guessedNum[2]+""+guessedNum[3]);
        for(int i=0;i<7;i++){
        scanManager();
        String result = compareNumber();
        if(result.equals("4A0B")){
        System.out.println("恭喜你猜出正确数字!");
        break;
        }else{
        if(i==6){
        System.out.println("很遗憾,没有猜出来");
        System.out.print("正确答案为:");
        for(int n=0;n<4;n++){
        System.out.print(guessedNum[n]);
        }
        System.out.print("\n");
        break;
        }
        System.out.println(result+"\t还有"+(6-i)+"次机会");
        }
        }
        if(quitYesOrNo()){
        continue;
        }else{
        break;
        }
        }
        scan.close();
        quitGame();
        }
        private void welcome(){
        System.out.println("**********欢迎游玩猜数游戏**********");
        }
        //控制用户输入数字
        private void scanManager(){
        int number=0;
        while(true){
        System.out.print("输入一位四位数:");
        String numStr=scan.next();
        if(judgeScan(numStr)){
        number=Integer.parseInt(numStr);
        break;
        }else{
        System.out.println("输入错误,重新输入!");
        }
        }
        this.scanNumber[0]=number/1000;
        this.scanNumber[1]=number/100%10;
        this.scanNumber[2]=number/10%10;
        this.scanNumber[3]=number%10;
        }
        //判定所输入的内容,通过正则表达式固定为4位数
        private boolean judgeScan(String numStr){
        String regex="^\\d{4}$";
        boolean boo=Pattern.compile(regex).matcher(numStr).find();
        return boo;
        }
        //比较数字,返回此次比较结果,以xAxB的结果返回
        private String compareNumber(){
        int A=0,B=0;
        for(int i=0;i<4;i++){
        for(int j=0;j<4;j++){
        if(this.scanNumber[i]==this.guessedNum[j]){
        if(i==j){
        A+=1;
        }else{
        B+=1;
        }
        }
        }
        }
        return A+"A"+B+"B";
        }
        //控制继续游戏规则
        private boolean quitYesOrNo(){
        while(true){
        System.out.println("继续游戏吗?(Y/N)");
        String str=scan.next();
        if(str.equals("Y")||str.equals("y")){
        return true;
        }else if(str.equals("N")||str.equals("n")){
        return false;
        }else{
        System.out.println("输入错误,重新输入!");
        }
        }
        }
        //退出
        private void quitGame(){
        System.out.println("谢谢游玩");
        System.exit(0);
        }
        }


        IP属地:陕西6楼2016-09-30 16:11
        回复
          不怕麻烦用C写感觉更好


          来自iPhone客户端8楼2016-09-30 16:12
          回复
            大神


            来自Android客户端9楼2016-09-30 16:13
            回复
              可是这种测试的,正常来说一般要到戒指那边才能出,一般情况,有没有可能效率更高,出特殊,或者新手包


              来自Android客户端10楼2016-09-30 16:13
              回复
                public class TestMain {
                public static void main(String[] args) {
                Game game=new Game();
                game.gameRun();
                }
                }
                测试类,走起~


                IP属地:陕西11楼2016-09-30 16:13
                回复
                  本帖只是一种算法实现,有好的实现可以一起讨论


                  IP属地:陕西12楼2016-09-30 16:15
                  回复
                    我是不是可以用oc写一个


                    IP属地:四川来自iPhone客户端13楼2016-09-30 16:21
                    回复
                      其实不用那么麻烦就可以用脑子想出来的


                      IP属地:湖北来自iPhone客户端15楼2016-09-30 16:50
                      回复
                        我运气好出过一次特殊一次新手包


                        来自iPhone客户端16楼2016-09-30 17:53
                        回复
                          看不懂


                          17楼2016-09-30 21:44
                          回复
                            楼主厉害了,我觉得写的挺好的啊,除了没缩进看着着实蛋疼,问个问题,在gameRun里为啥要用this.guessedNum,直接guessedNum就可以了吧。。。


                            19楼2017-04-14 07:19
                            回复
                              C# 会不会更好?


                              IP属地:辽宁来自iPhone客户端20楼2017-04-14 07:23
                              回复