java实现简单的猜数字小游戏
作者:buptwhq 发布时间:2023-11-11 12:55:40
标签:java,猜数字
本文实例为大家分享了java实现简单的猜数字的具体代码,供大家参考,具体内容如下
题目描述:
猜数字(又称 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~9999
System.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;// nAmB
if(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);
}
}
}
运行效果
来源:https://blog.csdn.net/whq___/article/details/115082154


猜你喜欢
- 一、推迟执行动作可以使用timer+map方法实现.代码如下:Observable.timer(5, TimeUnit.MILLISECON
- 引言对于Nacos大家应该都不太陌生,出身阿里名声在外,能做动态服务发现、配置管理,非常好用的一个工具。然而这样的技术用的人越多面试被问的概
- 简介简单工厂模式 (Simple Factory) 又叫静态工厂方法(Static Factory Method)模式。简单工厂模式通常是定
- 对于数组来说,我们想要对其中的一个元素进行引用,那就离不开new的使用。大家在学习new的时候,一般是以新建和初始化的身份出现的。如果是用在
- Object是所有类的父类,也就是说java中所有的类都是直接或者间接继承自Object类。比如你随便创建一个classA,虽然没有明说,但
- 讲这个例子前,咱们先来看一个简单的程序:字符串数组实现数字转字母:#include <stdio.h>#include <
- 本文实例为大家分享了OpenGL绘制Bezier曲线的具体代码,供大家参考,具体内容如下项目要求:– 使用鼠标在屏幕中任意设置控制点,并生成
- 这篇文章主要介绍了JAVA如何定义构造函数过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- 本文通过解决老王经常搞错借书人的问题,来引出行为型模式中的命令模式。为了在案例之上理解的更加透彻,我们需要了解命令模式在源码中的应用。最后指
- 在很多的Android项目中都需要用户登录、注册。这样的话在开发中做好保护用户密码的工作就显得尤为重要。这里我把自己的密码保护方法记录下来。
- 1.实现一个ItsClient 客户端用来实例化调用验证功能public class ItsClient {private static f
- 一. 下载tomcat首先要到tomcat官网去下载安装包,官网下载地址如下:http://tomcat.apache.org/downlo
- 在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相
- List查询JAVA中从数据库中取数据,根据MyBits返回结果主要有两种类型的List,一种是List<Entity>,还一种
- 1.打开idea -> file -> settings ->Plugins 搜索Free Mybatis p
- 本文实现Unity调用手机摄像,拍摄,然后识别二维码,显示二维码的内容。需要导入一个zxing.unity.dll文件,现在这个脚本的识别数
- 前言最近在学习java8,所以接下来会给大家介绍一系列的Java8学习内容,那么让我们先从lambda表达式开始。众所周知从java8出现以
- 1. 继承1. 子类继承了父类,获得父类的全部Field和方法。子类Student类继承父类,将可以获得父类的全部Field和方法publi
- static void Main(string[] args){ Process proc = null
- 前言Redis是一个开源的Key-Value数据缓存,和Memcached类似。Redis多种类型的value,包括string(字符串)、