赞
踩
/*游戏规则
1.游戏开始,系统随机生成【不重复】的4位数。
2.玩家输入猜测结果,系统根据猜测结果给出提示,AxBx
A 表示数字、顺序都对
B 表示数字对,顺序不对
随机数字 1234,用户猜测 1435,系统提示 A2B1,1和3数字和顺序都对所以A为2个,4数字对所以B为1
随机数字 1234,用户猜测 5678,系统提示 A0B0,数字、顺序都不对
随机数字 1234,用户猜测 4321,系统提示 A0B4,数字都对,顺序都不对
随机数字 1234,用户猜测 1234,系统提示 A4B0,数字、顺序都对,用户猜中!!!
3.每次游戏可以猜测7次。7次仍没有猜中,游戏结束。
*/
- package Week_HomeWork;
-
- import java.util.Arrays;
- import java.util.Random;
- import java.util.Scanner;
-
- public class First {
- static Random random = new Random();
- public static void main(String[] args) {
- System.out.println("------------猜数字小游戏---------------");
- // 1.系统随机生成不重复的四位数
- Scanner scanner = new Scanner(System.in);
-
- int flag = 0;
- while (true){
- System.out.println("请输入随机位数数字:");
- int number = scanner.nextInt();
- int readerNumber = number(4);
- flag++;
- System.out.println(readerNumber);
- strNumber(number, readerNumber);
- // flag开关思想
- if(flag==7){
- System.out.println("七次内没有猜中,游戏结束");
- break;
- }
- }
- }
- // 判断A和B的活动数字
- public static void strNumber(int number, int readerNumber) {
- int[] nuberToarr = numberToArray(number);
- // System.out.println(Arrays.toString(nuberToarr));
- int[] nuberToarr2 = numberToArray(readerNumber);
- int a = 0, b = 0;
- for (int i = 0; i < nuberToarr.length; i++) {
- for (int j = 0; j < nuberToarr2.length; j++) {
- if (i == j && nuberToarr[i] == nuberToarr2[j]) {
- a++;
- } else if (nuberToarr[i] == nuberToarr2[j] && i != j) {
- b++;
- }
- }
- }
- System.out.println( "系统提示A" + a + "B" + b);
- }
-
- // 数字转数组
- public static int[] numberToArray(int num) {
- int length = String.valueOf(num).length();
- int[] arr = new int[length];
- for (int i = length - 1; i >= 0; i--) {
- arr[i] = num % 10;
- num /= 10;
- }
- return arr;
- }
- // 生成随机数
- public static int number(int len) {
- int[] arr = new int[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9};
- int last = arr.length - 1;
- int res = 0;
- for (int i = 0; i < len; i++) {
- int index = random.nextInt(last + 1);
- int temp = arr[last];
- arr[last] = arr[index];
- arr[index] = temp;
- res = res * 10 + arr[last];
- last--;
- }
- return res;
- }
- }
运行结果:
- package Week_HomeWork;
-
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Random;
- import java.util.Scanner;
-
- public class CaiShuzi_game {
- public static void main(String[] args) {
- // 创建一个Random对象rand,用于生成随机数。
- Random rand = new Random();
-
- // 创建一个ArrayList对象randomNumberList,用于存储系统生成的随机数字。
- List<Integer> randomNumberList = new ArrayList<>();
-
- // 创建一个Scanner对象scanner,用于接收玩家的输入。
- Scanner scanner = new Scanner(System.in);
-
- // 调用generateRandomNumber方法,生成4位不重复的随机数,并将其存储在randomNumberList中。
- generateRandomNumber(randomNumberList, rand);
-
- // 向控制台输出游戏开始的提示信息。
- System.out.println("猜数字游戏开始了!系统已经生成了一个不重复的4位数。");
-
- // 用于记录猜测的次数,初始化为0。
- int attempts = 0;
-
- // 循环进行猜测,当猜测次数小于7时执行。
- while (attempts < 7) {
-
- // 提示玩家输入猜测的4位数,将输入的数存储在变量guess中,并将猜测次数加1。
- System.out.print("请输入你猜测的4位数:");
- int guess = scanner.nextInt();
- attempts++;
-
- // 将玩家猜测的数转换为List对象guessList,方便后续比较数字。
- List<Integer> guessList = convertToList(guess);
-
- // 用于记录A和B的数量,初始化为0。
- int aCount = 0;
- int bCount = 0;
-
- // 遍历玩家猜测的数字和系统生成的随机数字,并根据数字相等的情况分别增加aCount和bCount的数量。
- for (int i = 0; i < 4; i++) {
- int guessDigit = guessList.get(i);
- if (guessDigit == randomNumberList.get(i)) {
- aCount++;
- } else if (randomNumberList.contains(guessDigit)) {
- bCount++;
- }
- }
-
- // 如果aCount等于4,表示全部数字和顺序都猜对,输出猜对的提示信息;否则,输出提示信息,继续下一次猜测。
- if (aCount == 4) {
- System.out.println("恭喜你,猜对了!系统生成的数字是 " + convertToString(randomNumberList) +
- ",你用了 " + attempts + " 次尝试。");
- break;
- } else {
- System.out.println("提示:A" + aCount + "B" + bCount);
- }
- }
-
- // 如果玩家在7次内没有猜中,输出游戏结束的提示信息。
- if (attempts == 7) {
- System.out.println("很遗憾,你没有在规定次数内猜对。系统生成的数字是 " + convertToString(randomNumberList) + "。");
- }
-
- // 关闭Scanner对象,释放资源。
- scanner.close();
- }
-
- // 定义了一个名为generateRandomNumber的私有静态方法,用于生成不重复的随机数。
- private static void generateRandomNumber(List<Integer> numberList, Random rand) {
-
- // 使用while循环,当numberList的大小小于4时执行循环体。
- // 在循环体中,生成一个0到9的随机数digit,并检查numberList中是否已经包含该数字。
- // 如果未包含,则将该数字添加到numberList中。
- while (numberList.size() < 4) {
- int digit = rand.nextInt(10);
- if (!numberList.contains(digit)) {
- numberList.add(digit);
- }
- }
- }
-
- // 定义了一个名为convertToList的私有静态方法,用于将数字转换为List对象。
- private static List<Integer> convertToList(int number) {
- // 创建一个ArrayList对象digitList,用于存储数字的每一位。
- List<Integer> digitList = new ArrayList<>();
- // 使用while循环,当number大于0时执行循环体。
- while (number > 0) {
- // 在循环体中,取number除以10的余数digit
- int digit = number % 10;
- // 将digit添加到digitList的最前面
- digitList.add(0, digit);
- // 再将number除以10取整
- number /= 10;
- }
- return digitList;
- }
- // 定义了一个名为convertToString的私有静态方法,用于将List对象转换为字符串。
- private static String convertToString(List<Integer> numberList) {
- // 使用StringBuilder对象sb,遍历numberList中的每个数字,并将其逐个添加到sb中
- StringBuilder sb = new StringBuilder();
- for (int digit : numberList) {
- sb.append(digit);
- }
- // 最后,将sb转换为字符串并返回。
- return sb.toString();
- }
- }
运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。