java方法-----猜字母案例

第二篇文章
之前通过冒泡排序已经无意间涉及了for循环、数组、数组排序和方法多个java 的基础层次,这篇文章通过“猜字母”在深部了解一下java的方法。
游戏规则:系统随机生成五个不同字母,然后用户输入字母(不区分大小写),会根据对比结果,输出对了几个字母和位置对了几个。


总代码=main+check+generate

1. 用generate方法随机生成字母数组(chs数组)

flag[]数组是用来判断letters[]中字母是否被选中过,目的是为了选出五个不同的字母。

//生成随机字母
    public static char[] generate() {
        char[] chs=new char[5];
        boolean[] flag=new boolean[26];
        int x=0;
        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' };
        for(int i=0;i<chs.length;i++){
            do{
                x=(int)(Math.random()*letters.length);
            }while(flag[x]);
            chs[i]=letters[x];
            flag[x]=true;
        }
        return chs;
    }

2. 输入字母(input数组)与chs数组用check方法比较

双重for循环判断,首先通过数组两两遍历判断字母是否有相同的,然后通过数组下标判断位置是否相同。

//比对
    public static int[] Check(char chs[],char input[]) {
        int[] result=new int[2];
        for(int i=0;i<chs.length;i++){
            for(int j=0;j<input.length;j++){
                if(chs[i]==input[j]){
                    result[1]++;
                    if(i==j) result[0]++;
                    break;
                }
            }
        }
        return result;

    }

3. main方法中实现多次输入、比对


在while中反复执行输入,check和结果输出,
ps:exit是退出游戏,其中有作弊代码,有标注

    public static void main(String[] args) {
        int count=0;
        int score=500;
        Scanner scan=new Scanner(System.in);
        int[] result=new int[2];
        char[] chs=generate();
        char[] input=new char[5];
        //作弊代码,会把随机生成的数组输出
        System.out.println(chs);
        while(true){
            String str=scan.next().toUpperCase();
            if(str.equals("EXIT")){
                System.out.println("欢迎下次再来");
                break;
            }
            input=str.toCharArray();
            result=Check(chs, input);

            if(result[0]==chs.length){
                System.out.println("恭喜你答对了");
                break;
            }
            else
                System.out.println("猜对"+result[1]+"字母"+"猜对"+result[0]+"个位置");
        }
    }

4.总代码

ps:exit是退出游戏,其中有作弊代码,有标注


import java.util.Scanner;

public class Guessing {
    public static void main(String[] args) {
        int count=0;
        int score=500;
        Scanner scan=new Scanner(System.in);
        int[] result=new int[2];
        char[] chs=generate();
        char[] input=new char[5];
        System.out.println(chs);
        while(true){
            String str=scan.next().toUpperCase();
            if(str.equals("EXIT")){
                System.out.println("欢迎下次再来");
                break;
            }
            input=str.toCharArray();
            result=Check(chs, input);

            if(result[0]==chs.length){
                System.out.println("恭喜你答对了");
                break;
            }
            else
                System.out.println("猜对"+result[1]+"字母"+"猜对"+result[0]+"个位置");
        }
    }
    public static char[] generate() {
        char[] chs=new char[5];
        boolean[] flag=new boolean[26];
        int x=0;
        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' };
        for(int i=0;i<chs.length;i++){
            do{
                x=(int)(Math.random()*letters.length);
            }while(flag[x]);
            chs[i]=letters[x];
            flag[x]=true;
        }
        return chs;
    }
    public static int[] Check(char chs[],char input[]) {
        int[] result=new int[2];
        for(int i=0;i<chs.length;i++){
            for(int j=0;j<input.length;j++){
                if(chs[i]==input[j]){
                    result[1]++;
                    if(i==j) result[0]++;
                    break;
                }
            }
        }
        return result;

    }

}

过两天会开始写面向对象编程的案例“俄罗斯方块”,欢迎私信、评论。


互勉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值