本帖最后由 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 + " 恭喜您猜对了");
}
}
|
|