Java练习题---猜单词

Java练习题---猜单词_第1张图片题目要求分析:
第一步:随机产生一个单词,所以我们必须先自己定义一个存放所有单词的字符串数组。
第二步: 要随机产生一个单词,我们不妨随机产生一个单词数组的角标取出单词。
第三步:猜单词:(重点!!!)

  1. 提示用户猜随机产生的单词的每一个字母,加一串单词的密文。
  2. 密文的每一次更新,重新写一个方法,记录每次更新完的密文状态,即当字母猜对(字母存在),将该位置的密文改为对应的字母,猜错,记录猜错的次数,密文不更新。
  3. 直到猜完为止,打印该单词与猜错的次数。
  4. 循环猜单词,再随机产生单词,重复2.3步骤。

代码实现

import java.util.*;
class Class34{
    public static String[] words={"apple","banana","orange","pear","watermelon"};//定义全局变量单词组
    public static String word=null;//定义全局变量一个单词
    public static int missed=0;//定义全局变量记录错次数
    public static boolean[] state=null;//定义全局变量单词的状态数组,状态为
    
    public static void main(String[] args){
        Scanner input=new Scanner(System.in);
        Random random=new Random();
        word=words[random.nextInt(words.length)];//随机产生一个单词
        state=new boolean[word.length()];//初始化单词对应的密文状态
        while(true){
            String pwd=getPwd();//提示用户时要加入的密文
            System.out.print("Enter a letter in word "+pwd+":");
            String letter=input.nextLine();//输入一个所猜的单词字母,如猜"a",其虽然是一个字符,但也是以字符串的形式存在
            changeWordState(letter);//根据单词,密文状态,字母来更新密文
            if(isEnd()){//什么时候结束游戏
                System.out.println("The word is "+word+" ,you missed "+missed);//打印所猜的单词与错误次数
                System.out.print("Do you want to guess another word? y or n:");//提示是否要继续猜单词
                if(input.nextLine().equals("y")){//如果继续猜
                    word=words[random.nextInt(words.length)];//再随机产生一个单词
                    state=new boolean[word.length()];//更新一下状态
                    missed=0;//错误次数更新为0,随后while循环继续猜
                }else{//不继续猜就结束循环,结束猜单词游戏
                    break;
                }
            }
        }
    }
    public static boolean isEnd(){//判断结束条件
        for(int i=0;i<state.length;i++){//遍历单词状态
            if(state[i]==false){//如果有状态数组中有单词是*,即没有猜完
                return false;//返回没有结束
            }
        }
        return true;//遍历完数组没有false,返回猜完了
    }
    public static void changeWordState(String letter){//更新单词状态的方法
        boolean isExist=false;//设置一个标签,区分for循环是正常结束还是中途结束
        for(int i=0;i<word.length();i++){//遍历单词数组
           if((word.charAt(i)+"").equals(letter)) {//如果输入的字母存在
               isExist=true;//标签改为true
               if(state[i]==false){//如果字母存在且状态为false(没有更新)
                   state[i]=true;//更新后状态修改为true
               }else{
                   System.out.println("\t"+letter+" is already in the word !");//否则就是存在且已经更新过状态了,输出此字母已经存在
                   return;//结束遍历
               }
            } 
        }
        if(!isExist){//如果标签为false,及此字母不存在于此单词中
          missed++;//你猜错了,错误次数++
          System.out.println("\t"+letter+" is not in the word !");//打印没有这个字母
        }
    }
    public static String getPwd(){//获取密文的方法
        String pwd="";//先定义一个存密文的字符串
        for(int i=0;i<word.length();i++){//遍历单词
            if(state[i]==true){//如果状态是true ,表明存在需要修改
                pwd+=word.charAt(i);//打印正确的字母
            }
            else{//否则不是不需要修改
                pwd+="*";//打印单词长度所对应的***长度
            }
        }
        return pwd;//打印完之后就返回密文
    }
}

易错问题:

  1. 数组的长度不用(),获取字符串的长度不用括号
  2. 返回值的类型要清楚,有时不明白返回类型时就可以void
  3. 输入一个字符也是以字符串形式存储的
  4. 比较字符与字符串时要将字符转换为字符串+" ",也可将字符串转为字符就是取下标charAt(0)
  5. \t 横向跳格,即前边有一定的空格,\n换行
  6. 判断相等是是==,两个等号哦

总结:题目要求分析到位,每一步都需要代码实现,一步一步解决,不妨实现一步编译运行看看结果,再慢慢优化,易错雷区勿踩,要多加联系就会减少出错哦,要细心哟!

你可能感兴趣的:(Java练习题---猜单词)