猜数字游戏

1. 问题描述:

编写一个人机猜数游戏,游戏玩法如下: 

由计算机“想”一个四位数,请人猜这个四位数是多少。人输入四位数字后,计算机首先判断这四位数字中有几位是猜对了,并且在对的数字中又有几位位置也是对的,将结果显示出来,给人以提示,请人再猜,直到人猜出计算机所想的四位数是多少为止。 
例如:计算机“想”了一个“1234”请人猜,可能的提示如下: 
人猜的整数 计算机判断有几个数字正确 有几个位置正确 
1122 2 1 
3344 2 1 
3312 3 0 
4123 4 0 
1243 4 2 
1234 4 4 
游戏结束
0<=rand<=32766  0<=rand/32767<1   0<=8999*rand/32767<=8999
                  1334
1122 1 1 
3344 3 1 
3312 3 1 
4123 3 0 
1243 3 2 
1334 4 4 

2. 思路分析:

① 首先要产生一个四位的随机数字,那么范围应该是1000~9999,生成x到y之间的随机数字可以使用:

nextInt(y - x + 1) + x

② 判断有几位数字是猜对的,我们可以先对随机产生的四位数转化为字符串然后取出来每一位字符使用字符数组存起来,然后对于我们自己输入的数字也转化为字符串然后使用双层循环来遍历进行字符的比对,这里需要使用一个额外的数组来记录之前的那个位置上是否已经被访问过,因为我们知道假如我们输入的数字中具有相同的位那么没有进行标记的话会导致重复进行计算这样结果就不正确了

③ 判断有几个位置是猜对的,可以使用一层循环进行逐个字符的比较,所以来说将数字转化为字符串取出某一位的时候非常方便对其进行操作

3. 代码如下:

import java.util.Random;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		Random rm = new Random();
		//生成随机的四位数字
		int n = rm.nextInt(9000) + 1000;
		System.out.println(n);
		String s = Integer.toString(n);
		char arr[] = new char[4];
		for(int i = 0; i < 4; i++){
			arr[i] = s.charAt(i);
		}
		while(true){
			//使用一个辅助数组来进行标记是否之前已经比较过
			int helper[] = new int[4];
			int count = 0;
			String t = Integer.toString(sc.nextInt());
			int position = 0;
			for(int i = 0; i < 4; i++){
				for(int j = 0; j < 4; j++){
					if(arr[j] == t.charAt(i) && helper[j] == 0){
						helper[j] = 1;
						count++;
						break;
					}
				}
			}
			for(int i = 0; i < 4; i++){
				if(arr[i] == t.charAt(i)){
					position++;
				}
			}
			if(count == 4 && position == 4){
				System.out.println("游戏结束");
				break;
			}
			System.out.println(count + " " + position);
		}
			sc.close();
	}
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值