栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java实现猜字母游戏,猜五个大写的字母

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java实现猜字母游戏,猜五个大写的字母

需求(题目):
随机生成5个不重复的英文字符,全大写,例如:KHXUA
用户输入字符循环开始猜字符,每次猜完以后提示,字母对的个数和位置对的个数
例如用户输入:NBKHA,提示字符对3个位置对1个
满分500分,猜错一次扣5分,位置全对即为正确


分析:
1.随机生成5个不重复的英文字符
2.用户输入(输入的是字符串,转化为字符数组)
3.用户输入和随机生成进行比较(字符对的个数,位置对的个数)
4.计算分数

在随机生成五个不重复的大写字母这个步骤中,我写了两个实现方式,其中一个是老师讲的,利用了开关原理

package cn.tedu.day1016;

import java.util.Arrays;
import java.util.Scanner;

public class TestGussLetters {
    public static void main(String[] args) {
        char[] arr = getGenerateLetters();
        System.out.println(arr);//看着答案测试

        System.out.println("游戏开始!请尽情猜测!");

        //定义猜错的次数
        int count = 0;



        //定义一个死循环,让用户不停循环的猜,while(){}循环
        while(true){
            System.out.println("请输入你所猜的5个字母序列:(输入EXIT——退出游戏)");

            char[] chars = getScannerLetters();//定义一个字符数组chars调用获取用户输入的字符串,转为字符数组,与系统的正确答案进行比较
            String stt = String.valueOf(chars);//将字符数组再转换为字符串与EXIT比较,exit为字符串,字符数组与字符串无法比较
            if(stt.equals("EXIT")){
                System.out.println("真笨,游戏结束");
                break;
            }
            System.out.println("您输入的是:"+stt);//直接写chars,因为是引用类型,存的是地址,显示的是地址

            int[] result = check(arr,chars);//调用比较两个数组的方法,返回字符对的个数,位置对的个数

            if(result[0] == arr.length){
                int score = 100 * arr.length - count * 5;
                System.out.println("恭喜您猜对了,分数为:"+score);
                break;
            }else {
                count++;
                System.out.println("位置对的个数为:"+result[0]+",字符对的个数为:"+result[1]);
            }
        }
    }


    //定义获取五个不重复的字母并存到数组的方法getGenerateLetters
    public static char[] getGenerateLetters(){

        

        
        char[] chs = new char[5];

        
        char[] letters = {'A','B','C','D','E','F','G','H','I'
                ,'J','K','L','M','N','O','P','Q','R','S','T',
                'U','V','W','X','Y','Z'};

        
        
        boolean[] flag = new boolean[letters.length];

        
        for (int i = 0; i < chs.length; i++) {//chs.length,要比较的数组的长度chs,为5
            int index;//定义一个int类型,用来存下标的值
            
            do{
                
                index = (int)(Math.random()*letters.length);//Math.random(),范围为[0,1),为double,乘26,还为double,要强转为int类型

            }while (flag[index] == true);
            

            
            chs[i] = letters[index];

            
            flag[index] = true;
        }


        

        



        return chs;
    }


    //获取用户从控制台输入的字符串存到字符数组中
    public static char[] getScannerLetters(){

        
        Scanner sca = new Scanner(System.in);

        
        String str = sca.nextLine().toUpperCase();//获取输入的字符串并转换为大写

        
        char[] input = str.toCharArray();//定义一个字符数组接收字符串

        return input;
    }



    //对两个数组进行比较
    
    public static int[] check(char[] chs,char[] input){
        
        int[] result = new int[2];//两个长度的int数组

        
        for (int i = 0; i < chs.length; i++) {
            for (int j = 0;j < input.length;j++){
                if(chs[i] == input[j]){//匹配相对应下标的元素,即字母是否相同
                    result[1]++;//字符相同,个数+1
                    if(i == j){//再判断位置是否相同
                        result[0]++;//位置匹配在字符匹配基础上
                    }
                }
            }
        }
        return result;
    }

}

测试结果:

 

猜错三次,3*5=15;扣15分,所以分数为485 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/344969.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号