Java实现自动猜数(猜数游戏进阶版)
题目:
java自动生成一个0到1000000000之间的数,并且自己猜数(知道猜对为止,电脑会告诉你猜大了还是猜小了),并记录猜数次数和猜数的值。
首先我们要创建一个随机数,并且让他作为我们要猜的数。
Random r=new Random(); int x=r.nextInt(1000000000);
想象一下,如果我们猜数,我们不会盲目的猜(如果一直瞎猜也会成功,但是消费的时间和次数是很大的),我们会不停地压缩猜数的范围,例如我们猜的数是21,我们第一次猜的数是40,40比我们猜的数大,我们会在0到40之间猜数,我们第二次猜的数是11,11比我们要猜的数小,所以下次我们猜的数会在11到40之间,如此我们在以后的猜数中会不断压缩范围(边界问题),从而猜到我们的目标数。
我们用xr和xl作为右边界和左边界count作为猜数次数,并且进行初始化(xl=0,xr=1000000000,count=0)。
int xl=0,xr=1000000000,count=0;
我们通过while循环让机器不断进行猜数,每一次猜数都会压缩范围,直到猜到数并且跳出循环。
全部代码如下:
import java.util.Random; public class cai_shu { public static void main(String[] args) { Random r=new Random(); int x=r.nextInt(1000000000); int xl=0,xr=1000000000,count=0; System.out.println("要猜的数是"+x); boolean key=true; while(key) { count++;//加次数 int y=new Random().nextInt(xr);//机器猜的数 if(y<=xl) { y=xl+new Random().nextInt(xr-xl);//让机器猜的数始终保持在左右边界内。 } System.out.println("这次猜的数是"+y); if(y==x) { key=false;//跳出循环,使用break的话,while循环的条件是xr!=xl。 System.out.println("终于猜对了"); }else {//没猜中的话需要压缩范围 if(y>x&&y<=xr) { xr=y; } if(y<x&&y>=xl){ xl=y; } } } System.out.println("一共猜了"+count+"次"); } }
注意类名要保持一致哦!
经过多次测试,测试结果一般会保持在60次之内(效果很理想!)。
大功告成,有东西不明白的请在评论区里留言解决。。。。。
thanks everyone!
下一篇:
Java多线程学习处理高并发问题