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!

猜你喜欢

转载自blog.csdn.net/weixin_52473454/article/details/121252717
今日推荐