• Java零基础系列教程09 java基础综合编程练习---猜单词游戏


    配套视频教程

    本文B站配套视频教程

    image.png

    任务目的

    1.掌握字符串常用操作
    2.掌握随机数的用法
    3.掌握控制台基本输入输出
    4.掌握循环,分支条件的用法
    5.培养编程思维,提高分析问题能力`

    任务描述

    image.png

    需求

    给定单词数组(不少于10个),程序随机选择其中的一个,并显示单词字符长度个横线(-),用户有5次猜测机会,用户每次猜一个字母,如果正确,则将在相应的位置上显示出来;如错误则猜测机会减一,重复该过程,直至单词的全部字母全部猜出或者猜测次数用完,最后宣布用户胜利或失败。

    实例

    例如随机选出的单词是apple,程序先打印- - - - -
    用户输入p,程序打印
    -pp--
    用户输入e,程序打印
    -pp-e
    用户输入t,程序打印
    -pp-e
    您还有4次机会
    用户输入a,程序打印
    app-e
    用户输入l,程序打印
    apple
    恭喜您,取得胜利。

    任务注意事项

    请注意代码风格的整齐、优雅
    代码中含有必要的注释

    学习参考资料

    百度以下java类型的用法:

    • Scanner
    • Random

    参考答案

    首先,鼓励大家先自己进行思考,然后再对照我们给出的参考答案。以达到提高自己分析问题的能力。
    参考答案

    public class MyGuessWord {
    
        public static void printWords(char[] wordNow)
        {
            for(int i = 0; i < wordNow.length; i++)
            {
                System.out.print(wordNow[i]);
            }
        }
    
        public static void main(String[] args) {
            //1随机从题库中挑出一个单词给用户猜
            //题库怎么表达---字符串数组
            String[] words = {"static","abstract","extends","implements","throw","orange","student","select","group","interface"};
            //随机选出一个单词
            Random random =  new Random();
            int randomIndex = random.nextInt(words.length);//随机下标
    
            String selectWord = words[randomIndex];
            System.out.println(selectWord);
    
            //定义一个字符数组保存用户当前单词的猜中部分
             char[] wordNow = new char[selectWord.length()];
    
             //将字符数组中的每个字符初始设置成-
            for(int i = 0; i < wordNow.length; i++)
            {
                wordNow[i] = '-';
            }
    
           printWords(wordNow);
            //2.向用户输出和选出单词同等数量的横线-
            //需要知道单词有多少个字符 selectWord.length()
    
    
           int userTimes = 5;//用户可以猜5次;
           //让用户开始猜,接受用户输入一个字符,判断用户输入的字符是否在单词中
            //如果不在,机会减一;如果猜对了,就在字符对应的位置将该字符显示出来
    
            //上述步骤循环执行,有2种情况跳出循环
            //1.用户猜出了单词的全部字符,用户赢了
            //2.用户的机会减为0了,用户输了
            while(true)
            {
                Scanner scanner = new Scanner(System.in);
                System.out.println();
                String strGuess = scanner.next();//用户输入的字符z
    //        boolean bIsContains = selectWord.contains(strGuess);
                int nIndex = selectWord.indexOf(strGuess);//interface
                if(nIndex < 0)//如果不在,机会减一;输出还剩多少次机会,并且输出当前单词的猜中部分
                {
                    userTimes--;
                    if(userTimes == 0)
                    {
                        break;
                    }
                    System.out.println("还剩"+userTimes+"次机会");
                    printWords(wordNow);
                }
                else//如果猜对了,就在字符对应的位置将该字符显示出来,其他的位置依然打印-
                {
                    //在字符对应的位置将该字符显示出来,其他的位置依然打印-(有可能该字符在单词中出现多次,都要变身)
                    for(int i = 0; i < selectWord.length(); i++)
                    {
                        //取出单词的每一个字符
                        char tempC = selectWord.charAt(i);
                        if(tempC == strGuess.charAt(0))
                        {
                            wordNow[i] = tempC;
                        }
                    }
    
                    printWords(wordNow);
                    //如果wordNow数组中不在包含-,说明所有的字符全部被猜出来了
                    String strWordNow = String.valueOf(wordNow);//字符数组转为字符串
                    if(!strWordNow.contains("-"))
                    {
                        break;
                    }
    
                }
            }
    
            //判断最终结果
            //1.用户猜出了单词的全部字符,用户赢了
            //2.用户的机会减为0了,用户输了
            if(userTimes > 0)//说明不是因为机会没了跳出的循环
            {
                System.out.println("恭喜,你猜对啦");
            }
            else
            {
                System.out.println("你输了,正确答案是");
                System.out.println(selectWord);
    
            }
        }
    }
    
  • 相关阅读:
    超链接把一个值传到多个页面的方法
    jsp采用数据库连接池的方法获取数据库时间戳context.xml配置,jsp页面把时间格式化成自己需要的格式
    Myeclipse WEB工程JSP使用JNDI 数据库连接池连接Mysql数据库
    jsp页面图片显示不出来
    如何修改MyEclipse的默认编码方式
    MyEclipse8.5破解方法
    mysql创建的数据库在电脑什么位置?
    netsh winsock reset
    SQL Server(MSSQLSERVER)启动失败,提示“请求失败或服务未及时响应
    WIN7不能上网
  • 原文地址:https://www.cnblogs.com/songboriceboy/p/13757670.html
Copyright © 2020-2023  润新知