JAVA初学者练手案例2(单词拼写)

需求:单词和方法名听写
1.两套主功能,分别为单词听写和方法名听写
2.不能重复听写
3.方法名在书写的时候需要带小括号
(1)例如 add()
4.单词主要包括如下
static 、void 、public 、private 、 class 、 boolean 、 true 、 false 、 String 、 break 、 continue 、 return 、 Scanner 、Random …

5.单词对应的中文如下
静态 、无返回 、公有 、私有 、类 、布尔 、真 、假 、字符串 、跳出 、结束本次循环 、结束方法 、键盘录入 、随机数 …

6.方法名如下
next()、nextLine()、nextInt()、nextDouble、toCharArray()、charAt()、split()、substring()、replace()、length()、size()、add()、set()、remove()、get()…

7.方法名中文如下
键盘录入字符串、 键盘录入整数、键盘录入小数、讲字符串转成字符数组、通过索引取出字符串的字符、对字符串进行切割、对字符串进行截取、获取字符串的长度、获取集合的长度、集合添加的方法、集合修改的方法、集合删除的方法、集合获取的方法…

8.具体演示如下
(1)启动
JAVA初学者练手案例2(单词拼写)_第1张图片

(2)选择
JAVA初学者练手案例2(单词拼写)_第2张图片

(3)听写完成后,进行统计和对应的提示
JAVA初学者练手案例2(单词拼写)_第3张图片

9.听写方法雷同
10.加入注册和登录
11.其它功能自行添加

import java.util.*;

public class Demo {
    public static void main(String[] args) {
        ArrayList<Admin> list = new ArrayList<>();
while (true){
        System.out.println("欢迎进入默写小程序");
        System.out.println("请输入(1/2/3)");
        System.out.println("1.登录");
        System.out.println("2.注册");
        System.out.println("3.退出");
        Scanner sc =new Scanner(System.in);
        String c = sc.next();
        switch (c){
            case "1":if (islogn(list)){
                manu();
            }else {
                System.out.println("请先注册用户,再登录");
            }
            break;
            case "2":isregister(list);
            break;
            case "3":  System.exit(0);
            break;
        }


    }


    }

    //主菜单
    public static void manu() {
        while (true) {
            System.out.println("     >>>>>>单词与方法名听写<<<<<<");
            System.out.println("注意:方法名后面必须带括号,例如add()");
            System.out.println("请选择\n");
            System.out.println("1.单词听写");
            System.out.println("2.方法名听写");
            System.out.println("3.退出听写");
            Scanner sc = new Scanner(System.in);

            List<Data> array = new ArrayList<>();
            String choose = sc.next();
            switch (choose) {
                case "1":
                    System.out.println("单词拼写");
                    SpellWord(sc);
                    System.out.println("您是否想要重新听写一次(y/n)");
                    String choos1 = sc.next();
                    if ("y".equals(choos1)) {
                        SpellWord(sc);
                    } else {
                        System.out.println("Bye Bye!");
                    }
                    break;
                case "2":
                    System.out.println("方法名听写");
                    Method(sc);
                    System.out.println("您是否想要重新听写一次(y/n)");
                    String choos2 = sc.next();
                    if ("y".equals(choos2)) {
                        Method(sc);
                    } else {
                        System.out.println("Bye Bye!");
                    }

                    break;
                case "3":
                    return;


            }
        }
    }

    //单词拼写
    public static void SpellWord(Scanner sc) {
        List<Data> array = new ArrayList<>();
        array.add(new Data("static", "静态"));
        array.add(new Data("void", "无返回"));
        array.add(new Data("public", "公有"));
        array.add(new Data("private", "私有"));
        array.add(new Data("class", "类"));
        array.add(new Data("boolean", "布尔"));
        array.add(new Data("false", "错误"));
        array.add(new Data("String", "字符串"));
        array.add(new Data("break", "跳出"));
        array.add(new Data("continue", "结束本次循环"));
        array.add(new Data("return", "返回"));
        array.add(new Data("Scanner", "键盘录入"));
        array.add(new Data("Random", "随机数"));

        System.out.println("您选择的是单词拼写");
        System.out.println("请输入此次要拼写单词的个数");
        int right = 0;
        int number = 1;
        float sum = 0;
//输入听写的个数
        int Times = sc.nextInt();
        Set<Data> hm = new HashSet<>();
        while (hm.size() < Times) {
            int index = (int) (Math.random() * array.size());
            Data d = (Data) array.get(index);

            if (hm.add(d)) {
                System.out.println("            第" + (number++) + "题");
                System.out.println("请拼写出 " + d.getChina() + " 的英文");
                String write = sc.next();
                if (write.equals(d.getWord())) {
                    System.out.println("哎呦不错哦,这题答对了");
                    sum++;
                    right++;
                    if (hm.size() == Times) {
                        double rights = right / sum;
                        System.out.println("您本次总共拼写了" + Times + "个单词,其中答对了" + right + "个,正确率为 " + Math.ceil(rights * 100) + "%");
                        BackRmind(rights);
                    }
                } else {
                    System.out.println("这题答案不对,请再接再厉");
                    sum++;
                    if (hm.size() == Times) {
                        double rights = right / sum;
                        System.out.println("您本次总共拼写了" + Times + "个单词,其中答对了" + right + "个,正确率为 " + Math.ceil(rights * 100) + "%");
                        BackRmind(rights);
                    }
                }

            }


        }


    }

    //方法名听写
    public static void Method(Scanner sc) {
        List<Method> Array = new ArrayList<>();
        Array.add(new Method("next()", "键盘录入"));
        Array.add(new Method("nextLine()", "键盘录入字符串"));
        Array.add(new Method("nextInt()", "键盘录入整数"));
        Array.add(new Method("nextDouble", "键盘录入小数"));
        Array.add(new Method("toCharArray()", "将字符串转成字符数组"));
        Array.add(new Method("charAt()", "通过索引取出字符串的字符"));
        Array.add(new Method("split()", "对字符串进行切割"));
        Array.add(new Method("length()", "获取字符串的长度"));
        Array.add(new Method("substring()", "对字符串进行截取"));
        Array.add(new Method("replace()", "集合修改的方法"));
        Array.add(new Method("size()", "获取集合的长度"));
        Array.add(new Method("add()", "集合添加的方法"));
        Array.add(new Method("set()", "键盘录入字符串"));
        Array.add(new Method("remove()", "集合删除的方法"));
        Array.add(new Method("get()", "集合获取的方法"));

        System.out.println("您选择的是方法名听写");
        System.out.println("请输入此次要拼写方法名的个数");
        int right = 0;
        int number = 1;
        double sum = 0;
        int times = sc.nextInt();
        Set<Method> set = new HashSet<>();
        while (set.size() < times) {
            int index = (int) (Math.random() * Array.size());
            Method m = Array.get(index);
            if (set.add(m)) {
                System.out.println("                第" + (number++) + "题");
                System.out.println("请写出 " + m.getMethod_chinese() + " 的英文,记得加()");
                String spell = sc.next();
                if (spell != null) {
                    if (spell.equals(m.getPublic_word())) {
                        System.out.println("哎呦不错哦,这题答对了\n");
                        sum++;
                        right++;
                        if (set.size() == times) {
                            double rights = right / sum;
                            System.out.println("您本次总共拼写了" + times + "个方法名,其中答对了" + right + "个,正确率为 " + Math.ceil(rights * 100) + "%");
                            BackRmind(rights);
                        }
                    } else {
                        System.out.println("这题答案不对,请再接再厉\n");
                        sum++;
                        if (set.size() == times) {
                            double rights = right / sum;
                            System.out.println("您本次总共拼写了" + times + "个方法名,其中答对了" + right + "个,正确率为 " + Math.ceil(rights * 100) + "%");
                            BackRmind(rights);
                        }
                    }
                } else {
                    System.out.println("非法输入");
                }
            }


        }

    }

    //    根据正确率进行反馈提示
    public static void BackRmind(double r) {
        if (r == 1.00) {
            System.out.println("太牛逼了,全对\n");
        } else if (r < 1.00 && r >= 0.50) {
            System.out.println("还有待提高,请继续努力\n");
        } else if (r < 0.50 && r > 0) {
            System.out.println("正确率有点低哦,好好背\n");
        } else {
            System.out.println("一个都不对,还不赶快去背\n");
        }

    }

    //        登录
    public static boolean islogn(ArrayList<Admin>list) {
        Scanner sc =new Scanner(System.in);
        System.out.println("请输入用户名");
        String name =sc.next();
        System.out.println("请输入密码");
        String password=sc.next();
        if (list.size()>0){
        for (int i =0;i<list.size();i++) {
            Admin a = list.get(i);
            if (a.getUsername().equals(name) && a.getPassword().equals(password)) {
                return true;
            } else{
                System.out.println("密码或用户名有误,请检查后重新输入");
            }
        }
        }else {

            System.out.println("系统没有数据,请先注册");
        }
        return false;
    }

    //    注册
    public static boolean isregister(ArrayList<Admin>list) {
        //创建键盘输入对象
        Scanner sc = new Scanner(System.in);
        System.out.println("欢迎注册");
        //由于不确定用户到底几次可以输出正确的用户名, 因此加入无限循环
        String name;
        while (true) {
            System.out.println("请输入用户名:");
            name = sc.next();
            //提高效率,如果集合的长度为0, 那么就直接注册成功
            if (list.size() == 0) {
                //将用户名添加到集合的 管理员对象中
                break;
            }
            //做一个标记, true代表用户名存在, false就代表不存在
            boolean flag = false;
            //当集合的长度不等于0, 那么就说明集合中已经有注册的管理员
            //此时需要注册, 一定要保证用户名不能和集合中的管理员用户名不相同
            //循环遍历集合
            for (int i = 0; i < list.size(); i++) {
                //取出每一位管理员
                Admin admin = list.get(i);
                //通过管理员对象再获取名字
                String username = admin.getUsername();
                //判断名字是否和键盘输入的name一样
                if (username.equals(name)){
                    //如果相等, 就再次让用户输入用户名
                    //跳出for, 来到while继续输入
                    System.out.println("用户名已存在, 请重新输入:");
                    //更改标记的状态
                    flag = true;
                    break;
                }
            }
            //当for循环结束后, 判断标记的状态, 如果标记的状态还是false,那么就应该结束整个while
            //if (flag == false){   --> if (!flag){ 是一样的效果
            if (!flag){
                //应该结束整个while
                break;
            }
        }

        System.out.println("请输入密码:");
        String pass = sc.next();
        //管理员对象 在无限循环结束以后再创建
        Admin d = new Admin();
        //将注册的用户名和密码都保存到管理员对象中
        d.setUsername(name);
        d.setPassword(pass);
        //将创建的管理员对象添加到 集合
        list.add(d);
        return true;

    }
}





```java
public class Method {
    private String public_word;
    private String Method_chinese;

    public Method() {
    }

    public Method(String public_word, String method_chinese) {
        this.public_word = public_word;
        Method_chinese = method_chinese;
    }

    public String getPublic_word() {
        return public_word;
    }

    public void setPublic_word(String public_word) {
        this.public_word = public_word;
    }

    public String getMethod_chinese() {
        return Method_chinese;
    }

    public void setMethod_chinese(String method_chinese) {
        Method_chinese = method_chinese;
    }
}



```java
public class Data {
    private String Word;
    private String china;

    public Data() {
    }

    public Data(String word, String china) {
        Word = word;
        this.china = china;
    }

    public String getWord() {
        return Word;
    }

    public void setWord(String word) {
        Word = word;
    }

    public String getChina() {
        return china;
    }

    public void setChina(String china) {
        this.china = china;
    }
}

public class Admin {
    String username;
    String password;

    public Admin() {
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

由于初学JAVA方法用的可能不是最好,欢迎各位提供更好的方案

你可能感兴趣的:(java,开发语言,后端)