黑马程序员技术交流社区
标题:
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)
下载附件
2016-7-14 17:50 上传
autoGuess2.png
(46.45 KB, 下载次数: 52)
下载附件
2016-7-14 17:50 上传
作者:
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