黑马程序员技术交流社区

标题: day13.16 利用二份查找法,做一个自动猜数字游戏。 [打印本页]

作者: theape    时间: 2016-7-14 17:46
标题: day13.16 利用二份查找法,做一个自动猜数字游戏。
本帖最后由 theape 于 2016-7-14 17:50 编辑

猜数字游戏,听过课的都知道,我就不介绍了。我的思路是,用户猜一次,如果猜不中,剩下的让程序利用二分法原理自动去猜。

import java.util.Scanner;
public class AutoGuess
{
    /*  自动猜数游戏1-100
        先设定最小值numMin=1 和 最大值numGuess=100
        要猜的数numRandom   在猜的数numGuess
        如果猜的数numGuess较大,设最大值numMax = numGuess - 1,并求平均值,赋值给numGuess=(numMax+numMin)/2
        如果猜的数numGuess较小,设最小值numMin = numGuess + 1,并求平均值,赋值给numGuess=(numMax+numMin)/2
    */
    public static void main(String[] args)
    {
        int numRandom = (int)(Math.random()*100)+1;    // 随机生成的数
        //numRandom = 99;                             // 随机数设置为一个指定的数,测试用
        //System.out.println(numRandom);                // 显示随机生成的数,测试用
        Scanner sc = new Scanner(System.in);            // 创建键盘录入对象
        System.out.print("请输入1~100的整数:");
        int numGuess = sc.nextInt();                    // 用户录入的数
        //int numGuess = 50;                            // 系统设定一个数,测试用
        int numMin = 1;
        int numMax = 100;

        // 针对用户输入的数越界,进行处理
        if (numGuess > numMax) {
                numGuess = numMax;                // 大于100的数越界,回到100
                System.out.println("您输入的数大于100,将被强制设置为100");
        }
            if (numGuess < numMin) {
                    numGuess = numMin;                // 小于1的数越界,回答1
                    System.out.println("您输入的数小于1,将被强制设置为1");
            }

            while(numGuess != numRandom){                        // 如果用户猜不中,进入循环语句,进行二份查找
            if (numGuess > numRandom)
            {
                    if (numRandom == numMin) {                        // 如何和最小值一样,直接结束
                            numGuess = numMin;
                            break;
                    }
                System.out.println(numGuess + " 大了");
                numMax = numGuess-1;
                numGuess = (int)((numMin + numMin)/2);
            }else if(numGuess < numRandom)
            {
                    if (numRandom == numMax) {                        // 如果和最大值一样,直接结束
                            numGuess = numMax;
                            break;
                    }
                System.out.println(numGuess + " 小了");
                numMin = numGuess+1;
                numGuess = (int)((numMin + numMax)/2);

            }else
            {
                break;
            }
        }
        System.out.println(numGuess + " 恭喜您猜对了");
    }
}

autoGuess1.png (82.44 KB, 下载次数: 54)

autoGuess1.png

autoGuess2.png (46.45 KB, 下载次数: 52)

autoGuess2.png

作者: anyeyyc    时间: 2016-7-14 21:19
可以直接产生一个随机数  再用二分查找去找这个数  还要猜吗
作者: 呆呆的小呆    时间: 2016-7-14 21:46
666666666666666666666
作者: q123123    时间: 2016-7-14 23:14
二分查找......我能用关系运算符吗.....




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2