猜数字(又称公牛和母牛)是一种古老的的密码破译类益智类小游戏,起源于 20 世纪中期,一般由两个人或多人玩,也可以由一个人和电脑玩。通常由两个人玩,一方出数字,一方猜。

游戏规则:出数字的人要想好一个没有重复数字的 4 个数,不能让猜的人知道。猜的人就可以开始猜。每猜一个数字,出数者就要根据这个数字给出 几 A 几 B,其中 A 前面的数字表示数字正确且位置也正确的数的个数,而 B 前的数字表示数字正确但位置不正确的数的个数。如正确答案为 5234 ,而猜的人猜   5346 ,则是 1A2B ,其中有一个 5 的位置对了,记为 1 ,而 3 和 4 这两个数字对了,而位置没对,因此记为 2 B,合起来就是 1A2B 。接着猜的人再根据出题者的几 A 几 B 继续猜,直到猜中(即4 A 0 B)为止。

要求:

1、出数字(由电脑产生 4 个 0-9 随机数,且不重复)

2、猜数字(用户输入):

2-1:只能输入一个数字字符串

2-2:字符串中的字符不能重复

2-3:只能输入 4 个字符(如果字符个数不等于 4 个,需要用户重新输入)

注意:如果用户没有输入正确的话,不会进入比较环节

3、用户猜的数字和电脑出的数字比较,给出结果几A几B,如果结果不是 4A0B,需要用户重新输入,直到 4A4B为止

public class Games{public static void main(String[] args){System.out.println("猜数字游戏开始咯!");// 1.出数字(由电脑产生4个0-9随机数,且不重复)/*随机数 Math.random()  生成 0-1之间的浮点型随机数整型随机数a-b--> a + 0~(b-a)   (int)(Math.random() * (b - a + 1) + a)*/// 创建数组int[] suiJiShu = new int[4];// 遍历随机数数组的同时 放随机数// 此时i可以表示 数组元素的下标 计数变量for (int i = 0; i < suiJiShu.length; i++){// 生成 0-9 随机数 放入数组下标为i处suiJiShu1[i] = (int)(Math.random() *( 9 - 0 + 1) + 0);// 去重 i下标的元素,和所有下标小于i的元素做比较,如果重复// 重新赋值for(int j = 0;j < i;j++){// j 表示 比i小的所有下标if(suiJiShu[i] == suiJiShu[j]){// 循环回滚i--;break;}}}System.out.println("电脑产生的数字:");for(int i = 0;i < suiJiShu.length;i++){System.out.print(suiJiShu[i] + " ");}// 2.猜数字(用户输入)// 用户输入存在限制/*1.只能输入一个数字字符串2.字符串中的字符不能重复3.只能给4个字符(如果字符个数不等于4个,需要请用户重新输入)PS:如果用户没有输入正确的话,不会进入比较环节*/// 输入器Scanner input = new Scanner(System.in);char[] inputChars;// 步骤1:只要用户重新输入一次,输入的校验都需要再完成一次// 重复去执行步骤1--循环语句块while (true){// 用户输入System.out.println("请输入猜的数字:");String inputNum = input.next();// 字符串转字符数组inputChars = inputNum.toCharArray();// 输入信息的校验 保证数据安全// 判断字符个数 如果不为4,请用户重新输入// inputChars.length != 4 说明 输入有误,请用户重新输入if(inputChars.length != 4){System.out.println("用户输入字符不为4");continue;}// 验证用户输入是否为数字字符boolean isContinue = false;for(int i = 0;i < inputChars.length;i++){// 不满足数字字符要求48-57if(inputChars[i] < 48 || inputChars[i] > 57){// 输入有误 此时应该让用户重新输入isContinue = true;break;}}if(isContinue){System.out.println("输入数据,不为数字字符");continue;}// 判断字符串是否重复for(int i = 0;i < inputChars.length;i++){for(int j = 0;j < i;j++){if(inputChars[i] == inputChars[j]){isContinue = true;break;}}}if(isContinue == false){System.out.println("用户输入的数据 是合法的");break;}System.out.println("输入数据,数字字符重复");// 3.用户猜的数字 和 电脑 出的数字对比,给出结果几A几B,如果结果不是4A0B,需要用户重新输入,知道4A0B为止// 判断 用户输入的信息和电脑产生的随机数 给出结果// 记录A 位置相同且数字相同的个数int countA = 0;// 记录B 位置不同但数字相同 的个数int countB = 0;for (int i = 0;i < suiJiShu.length;i++){for (int j = 0;j < inputChars.length;j++){if (suiJiShu[i] == inputChars.length - 48){if (i == j){countA++;}else {countB++;}}}}String info = countA + "A" + countB + "B";System.out.println(info);if(info.equals("4A0B")){System.out.println("成功");break;}else {System.out.println("请重新猜数字");}}}
}

公牛和母牛(猜数字游戏)相关推荐

  1. 公牛母牛--------猜数字游戏

    1.出数字(由电脑产生4个0-9随机数,且不重复) (双色球) 2.猜数字(用户输入),用户输入存在限制 1.只能输入一个数字字符串 2.字符串中的字符不能重复 3.只能给4个字符(如果字符个数不等于 ...

  2. 可能是你见过最强的猜数字游戏(doge

    本文完全原创!!!!! 本文完全原创!!!!! 本文完全原创!!!!! 如有雷同请联系作者 目录 前言 代码一览 代码剖析 总结 前言 因为学校期末原因,一直没有更新博客.距离上一篇博客居然已有一个多 ...

  3. 299. 猜数字游戏

    299. 猜数字游戏 你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下: 写出一个秘密数字,并请朋友猜这个数字是多少.朋友每猜测一次,你就会给他一个包含下述信息的提示: 猜 ...

  4. C语言经典小游戏---猜数字游戏 (包含C语言中如何实现随机数的生成)

    题目描述:输入1-100之间的数字,进行猜数字游戏,猜大猜小有提示,直至才对为止,游戏可以重复游玩. 算法思路: 1.用void函数分别写出菜单程序与游戏进程程序. 2.用switch-case-de ...

  5. 例题3-4 猜数字游戏的提示(Master-Mind Hints, UVa 340)

    实现一个经典"猜数字"游戏.给定答案序列和用户猜的序列,统计有多少数字位置正确 (A),有多少数字在两个序列都出现过但位置不对(B). 输入包含多组数据.每组输入第一行为序列长度n ...

  6. c语言猜数字游戏用while,【C语言基础】有趣的猜数字游戏。(while循环,if语句,switch语句)...

    要求:猜数字游戏的实现.代码如下:#include #include #include void menu() { printf("***************************** ...

  7. python猜年龄代码_python入门教程NO.7用python来写一个猜数字游戏

    python入门教程 本文涉及的python基础语法为while循环 #python#3中while语句常常被用于循环执行某个程序,任何非0和非空null的值,都会被条件判断为True while 条 ...

  8. Go-实现猜数字游戏代码

    实现猜数字游戏代码 1 package main 2 3 import ( 4 "fmt" 5 "math/rand" 6 "time" 7 ...

  9. python猜数字游戏简单-python猜数字游戏快速求解解决方案

    python猜数字游戏快速求解解决方案.使用方法: 1. 保存代码为guessall.py 2. 执行python guessall.py > result.txt 3. 打开result.tx ...

最新文章

  1. 食出100分:‘粥’的做法4---鱼片瘦肉粥
  2. 山东谋定富硒产业示范园-农业大健康·万祥军:国研功能农业
  3. CSS3实践之路(一):CSS3之我观
  4. neo4j 显示名字_Neo4j:绘制“我的名字是……我在工作”图
  5. c iostream.源码_通达信《K线上画趋势线预警》精选指标(附源码)
  6. EF+postgresql中的一些问题
  7. mysql语句二级查询_mysql_2 基本查询语句
  8. 中文信息处理(三)—— 词性标注
  9. 欧拉函数之和(51nod 1239)
  10. 用c语言编写金山打字游戏,c#实现简单金山打字小游戏(源码)
  11. excel快速选择多行数据
  12. 各向异性元件中的偏振效应
  13. LittleVGL--07lv_obj基础对象介绍、API 接口、例程演示
  14. 泡泡龙游戏开发系列教程(五)
  15. 更改Ubuntu 18.04的时区
  16. 密码学_最近在论证一个问题,到底是先有鸡还是先有蛋
  17. 软考知识点梳理--项目评估
  18. Axure 蚂蚁设计团队组件库 让交互稿美美搭
  19. 为什么今天安全仍然重要
  20. Google原生机pixel 刷机Root

热门文章

  1. 什么是keep-alive?
  2. FaceNet 人脸比对框架 部署+测试
  3. 打怪游戏 勇者打恶龙1.6(1.7)
  4. 【电脑技巧】win10怎么查看电池的损耗情况
  5. 拉黑的微信好友怎么恢复,拉黑的微信好友聊天记录还在吗
  6. 大学物理上册详细笔记_大学物理上册课堂笔记
  7. 【Selenium】控制当前已经打开的 chrome浏览器窗口
  8. java封装joda_【类库】java时间操作类库:Joda-Time
  9. android投屏!Android开发还会吃香吗?挥泪整理面经
  10. 【安全知识分享】2021年安全生产月主题宣讲课件(附下载)