9 java基础综合编程练习---猜单词游戏

简介: 9 java基础综合编程练习---猜单词游戏

配套视频教程

本文B站配套视频教程


image.png


任务目的


1.掌握字符串常用操作

2.掌握随机数的用法

3.掌握控制台基本输入输出

4.掌握循环,分支条件的用法

5.培养编程思维,提高分析问题能力`


任务描述


image.png


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);
        }
    }
}


目录
相关文章
|
24天前
|
Java 程序员
Java编程中的异常处理:从基础到高级
在Java的世界中,异常处理是代码健壮性的守护神。本文将带你从异常的基本概念出发,逐步深入到高级用法,探索如何优雅地处理程序中的错误和异常情况。通过实际案例,我们将一起学习如何编写更可靠、更易于维护的Java代码。准备好了吗?让我们一起踏上这段旅程,解锁Java异常处理的秘密!
|
4天前
|
存储 缓存 Java
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
Java 并发编程——volatile 关键字解析
|
8天前
|
算法 Java 调度
java并发编程中Monitor里的waitSet和EntryList都是做什么的
在Java并发编程中,Monitor内部包含两个重要队列:等待集(Wait Set)和入口列表(Entry List)。Wait Set用于线程的条件等待和协作,线程调用`wait()`后进入此集合,通过`notify()`或`notifyAll()`唤醒。Entry List则管理锁的竞争,未能获取锁的线程在此排队,等待锁释放后重新竞争。理解两者区别有助于设计高效的多线程程序。 - **Wait Set**:线程调用`wait()`后进入,等待条件满足被唤醒,需重新竞争锁。 - **Entry List**:多个线程竞争锁时,未获锁的线程在此排队,等待锁释放后获取锁继续执行。
36 12
|
4天前
|
存储 安全 Java
Java多线程编程秘籍:各种方案一网打尽,不要错过!
Java 中实现多线程的方式主要有四种:继承 Thread 类、实现 Runnable 接口、实现 Callable 接口和使用线程池。每种方式各有优缺点,适用于不同的场景。继承 Thread 类最简单,实现 Runnable 接口更灵活,Callable 接口支持返回结果,线程池则便于管理和复用线程。实际应用中可根据需求选择合适的方式。此外,还介绍了多线程相关的常见面试问题及答案,涵盖线程概念、线程安全、线程池等知识点。
57 2
|
21天前
|
安全 算法 Java
Java多线程编程中的陷阱与最佳实践####
本文探讨了Java多线程编程中常见的陷阱,并介绍了如何通过最佳实践来避免这些问题。我们将从基础概念入手,逐步深入到具体的代码示例,帮助开发者更好地理解和应用多线程技术。无论是初学者还是有经验的开发者,都能从中获得有价值的见解和建议。 ####
|
21天前
|
Java 调度
Java中的多线程编程与并发控制
本文深入探讨了Java编程语言中多线程编程的基础知识和并发控制机制。文章首先介绍了多线程的基本概念,包括线程的定义、生命周期以及在Java中创建和管理线程的方法。接着,详细讲解了Java提供的同步机制,如synchronized关键字、wait()和notify()方法等,以及如何通过这些机制实现线程间的协调与通信。最后,本文还讨论了一些常见的并发问题,例如死锁、竞态条件等,并提供了相应的解决策略。
44 3
|
26天前
|
开发框架 安全 Java
Java 反射机制:动态编程的强大利器
Java反射机制允许程序在运行时检查类、接口、字段和方法的信息,并能操作对象。它提供了一种动态编程的方式,使得代码更加灵活,能够适应未知的或变化的需求,是开发框架和库的重要工具。
41 2
|
IDE 小程序 前端开发
详细解读java的俄罗斯方块游戏的源代码--【课程设计】
详细解读java的俄罗斯方块游戏的源代码--【课程设计】
|
Java 定位技术 开发者
基于Java的俄罗斯方块游戏
基于Java的俄罗斯方块游戏