猜数字小游戏

  • 题目描述
    • 代码
    • 运行效果
  • 新增功能
    • 思路
    • 代码
    • 运行效果

题目描述

猜数字(又称 Bulls and Cows )是一种古老的的密码破译类益智类小游戏,起源于20世纪中期,一般由两个人或多人玩,也可以由一个人和电脑玩。通常由两个人玩,一方出数字,一方猜。出数字的人要想好一个没有重复数字的4个数,不能让猜的人知道。猜的人就可以开始猜。每猜一个数字,出数者就要根据这个数字给出nAmB,其中A前面的数字n表示数字正确且位置也正确的数的个数,而B前的数字m表示数字正确但位置不正确的数的个数。如正确答案为 5234,而猜的人猜 5346,则是 1A2B,其中有一个5的位置对了,记为1A,而3和4这两个数字对了,而位置没对,因此记为 2B,合起来就是 1A2B。接着猜的人再根据出题者的几A几B继续猜,直到猜中(即 4A0B)为止。
程序要求:1、满足题意 2、输入数字的合法性3、输出总猜测次数

代码

package Practice;
// 猜数字 (Bulls and cows)
import java.util.Scanner;public class Day0322 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 产生0000~9999的随机数double r = Math.random();int res = (int)(r * 8999 + 1000);int flag = 0;// 合法性检查,判断存在重复数字while(flag == 0){int[] check = new int[10];for(int i = 0; i < 10; i ++ ) check[i] = 0;check[res / 1000] += 1;check[(res / 100) % 10] += 1;check[(res / 10) % 10] += 1;check[res % 10] += 1;for(int i = 0; i < 10; i ++ )if(check[i] >= 2) {r = Math.random();res = (int)(r * 8999 + 1000);flag = 0;break;}else flag = 1;}// 0000~9999System.out.println("答案: " + res);int input = -1;int idx = 0;int times = 0;while(input != res){System.out.print("请输入你猜的数字: ");input = scanner.nextInt();int inputcopy = input;if(input < 0){System.out.println("您输入的数字不是四位数!");times ++;continue;}int t = 0;// 输入数字为4位数,合法性检查while(inputcopy != 0){inputcopy /= 10;t ++;}if(t != 4){System.out.println("您输入的数字不是四位数!");times ++;continue;}int n = 0, m = 0;// nAmBif(input == res) break;// 输入的各个位数int[] a = new int[4];a[0] = input / 1000;a[1] = (input / 100) % 10;a[2] = (input / 10) % 10; a[3] = (input) % 10;// 答案的各个位数int[] ans = new int[4];ans[0] = res / 1000;ans[1] = (res / 100) % 10;ans[2] = (res / 10) % 10; ans[3] = (res) % 10;for(int i = 0; i < 4; i ++){if(ans[i] == a[i]) n += 1; // A的数量for(int j = 0; j < 4; j ++){// B的数量if(ans[j] == a[i] && j != i) m += 1;}}System.out.print((++ idx) + ": " + n + "A" + m + "B");System.out.println();times ++;}if(input == res){times ++;System.out.println("4A0B");System.out.println("你很厉害啊!");System.out.println("猜测次数: " + times);}}}

运行效果

新增功能

思路

nAmB中,A的数量可直接遍历字符串的每个位置
input.charAt(i) == target.charAt(i)n ++
否则,分别对两个字符串计数出现的数字数量,需要分别开一个长度为10的数组。
由于是匹配问题,同一个数字在两个字符串中若出现次数不同,则只能取最小。累加即得m

代码

// 猜数字 (Bulls and cows)
import java.util.Scanner;public class Main {// 判断是否为纯数字public  static boolean check(String str){for(int i = 0; i < str.length(); i ++ ){if(str.charAt(i) >= '0' && str.charAt(i) <= '9') continue;else return false;}return true;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 产生0000~9999的随机数double r = Math.random();int res = (int)(r * 9999);String target = String.format("%04d", res);// 0000~9999System.out.println("答案: " + target);String input = "";int idx = 0;int times = 0;while(!input.equals(target)){System.out.print("请输入你猜的4位数字: ");input = scanner.nextLine();if(input.length() != 4) {System.out.println("您输入的数字长度不是四位~");continue;}if(!check(input)) {System.out.println("您输入了非数字~");continue;}int n = 0, m = 0;// nAmBif(input.equals(target)) break;// 输入错误时计算n, mint[] cntN = new int[10];int[] cntM = new int[10];for(int i = 0; i < target.length(); i ++ ){if(input.charAt(i) == target.charAt(i)) n ++ ; // 数字对且位置对else{cntN[target.charAt(i) - '0'] ++ ;cntM[input.charAt(i) - '0'] ++ ;}}for(int i = 0; i < 10; i ++ ) m += Math.min(cntN[i], cntM[i]);System.out.print((++ idx) + ": " + n + "A" + m + "B");System.out.println();}if(input.equals(target)){idx ++;System.out.println("4A0B");System.out.println("你很厉害啊!");System.out.println("猜测次数: " + idx);}}}

运行效果

猜数字小游戏(JAVA)相关推荐

  1. 第三次学JAVA再学不好就吃翔(part28)--猜数字小游戏

    学习笔记,仅供参考 面向对象 猜数字小游戏 随机生成一个1 ~ 100之间的数,我来猜是几: import java.util.Scanner;class GuessNumTest {public s ...

  2. 初识JAVA:猜数字小游戏案例---系统产生一个1-100之间的随机数,猜出这个数是多少?

    package com.pku.wuyu.io; import java.util.IllegalFormatCodePointException; import java.util.Random; ...

  3. Java版 猜数字小游戏

    猜数字小游戏是一定是大家学习C语言编程的第一个或者是前几个小小项目了吧,今天,我们使用Java进行猜数字小游戏的实现 有对猜数字小游戏的基本思想不清楚的可以看这篇博客,里面是用C语言进行的实现以及相关 ...

  4. Java实现简单的猜数字小游戏

    一. 题目 猜数字小游戏规则: 系统自动生成一个随机整数然后由用户输入一个猜测的数字,如果输入数字比生成数大,则提示"猜大了":如果输入数字比生成数小,则提示"猜小了&q ...

  5. Java基于GUI完成的猜数字小游戏

    猜数字小游戏 不废话想看看效果吧! 当我们答对后就会出现: 如果你实在急着想知道答案: 简要说明: 所猜测的数字为1~1000: 只能通过按确定输出答案,未设置Enter键直接输入的监控. 退出请直接 ...

  6. JAVA猜数字小游戏(随机数Random类)

    快乐JAVA,通过不断的摸索,从C到PHP再到Python,Python再到Java-终于被我找到了属于我的本命编程语言(泪目).学起来很开心,很快乐,这种感觉就像和初恋谈恋爱一样,编程不再是写代码, ...

  7. Java语言实现猜数字小游戏

    之前笔者在学习C语言的初级阶段,就已经实现了用C语言简单实现猜数字小游戏,既然笔者最近在学习Java的初级阶段,那么,也应该写一个Java语言实现的猜数字小游戏!! C语言实现猜数字小游戏:原文链接为 ...

  8. 小玩意:猜数字小游戏(Java GUI)

    猜数字小游戏(Java GUI) 又到了学期末,又到了交各种各样作业的时间.悉听闻面向对象的小作业,诶,课程设计四选一,还没写,得嘞,得写了. 找一天,开始写,放正文 游戏规则 游戏规则,顾名思义,游 ...

  9. java编写数字游戏大全_Java编写猜数字小游戏

    本文实例讲述了java实现的简单猜数字游戏代码.分享给大家供大家参考. 以下是java语言写的一个猜数字小游戏引用片段: import java.text.simpledateformat; impo ...

最新文章

  1. 经典笔试上机考题-表达式求值
  2. mysql日常错误信息解决方法:InnoDB: and force InnoDB to continue crash recovery here.
  3. Windows 编程之 对话框总结
  4. HTML 表格垂直对齐方式
  5. apache 编译安装php mysql_编译安装APACHE+PHP+MYSQL
  6. IE报vuex requires a Promise polyfill in this browser问题解决
  7. solidworks钣金插件_SolidWorks钣金三圆弧交点如何展开?大神和小白请进
  8. 玩法与叙事撕裂许久,3A与暴力却难分难舍
  9. 关于Tomcat配置虚拟路径保存、访问图片
  10. 点击项目任意页面都是404,且报错class path resource [] cannot be opened because it does not exist等
  11. Hdu 4093 ( Xavier is Learning to Count ) BZOJ2498 FFT+容斥原理
  12. 11.什么是Heuristic
  13. 2019游戏 f1_F1 2019
  14. 【论文阅读|深读】RolNE: Improving the Quality of Network Embedding with Structural Role Proximity
  15. 如何在PHP中使用Modulo运算符
  16. 自平衡自行车本质就是一个惯性飞轮,本质就是一样的!!!
  17. mongodb数据同步到elasticsearch的中间件,支持全量,增量,实时同步等多种同步情景。(syncs MongoDB to Elasticsearch in realtime) (Mong
  18. 石墨笔记,熊掌记和 Effie 哪个更适合采编?
  19. 如何将List集合存入数据库,解决方案
  20. spss分析方法-单样本K-S检验(转载)

热门文章

  1. 万达商业再递招股书:上半年派息35亿 腾讯与碧桂园是股东
  2. Qt 使用QAxObject操作Word
  3. R语言线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)
  4. 屏幕分辨率及衬线字体
  5. VS2022写Qt代码遇到的问题之 C2504 “xxx”: 未定义基类 (编译源文件
  6. 辐射3特殊武器拿法(修正版)
  7. 【论文阅读】查询搜索中的安全和效率权衡(ACM 10.1145)
  8. python输出最长字符串_使用Python打印最长的字母子字符串,并打结...
  9. Python 第三方模块 统计1 statsmodels模块1 简介,回归
  10. 啡鸟集:同样是冰咖啡,冷萃咖啡为什么比较贵?