Java练习题 - Random类&ArrayList集合

第一题:需求实现
  • 随机验证码。

    • 随机生成十组六位字符组成的验证码。
    • 验证码由大小写字母、数字字符组成。
  • 代码实现,效果如图所示:

  • 开发提示:

    • 使用字符数组保存原始字符,利用Random类生成随机索引。
  • 参考答案:


    public class Test1 {
        public static void main(String[] args) {
            for (int i = 0; i < 10; i++) {
                String s = verifyCode();
                System.out.println("随机验证码:" + s);
            }
        }
        public static String verifyCode() {
            char[] arr = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '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', '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'};
    
            Random random = new Random();
            String code  = "";
            for (int i = 0; i < 6; i++) {
                int index  = random.nextInt(arr.length);
               code  += arr[index];
    
            }
            return code;
        }
    }
第二题:需求实现
  • 键盘录入学生信息,保存到集合中。
    • 循环录入的方式,1:表示继续录入,0:表示结束录入。
    • 定义学生类,属性为姓名,年龄,使用学生对象保存录入数据。
    • 使用ArrayList集合,保存学生对象,录入结束后,遍历集合。
  • 代码实现,效果如图所示:
  • 参考答案:

    public class Test2 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            ArrayList<Student> list = new ArrayList<>();
            while (true) {
                System.out.println("1.录入信息 0.退出");
                int i = scanner.nextInt();
                switch (i) {
                    case 1:
                        inputStu(list , scanner);
                        break;
                    case 0:
                        System.out.println("录入完毕");
                }
                if (i == 0){
                    break;
                }
            }
    
            for (int i = 0; i < list.size(); i++) {
                Student student = list.get(i);
                student.show();
            }
        }
    
        private static void inputStu(ArrayList<Student> list , Scanner sc) {
            System.out.println("请输入姓名:");
            String name = sc.next();
            System.out.println("请输入年龄:");
            int age = sc.nextInt();
            Student student = new Student(name, age);
            list.add(student);
        }
    }
    
    class Student{
        private String name;
        private int age;
        public Student() {
        }
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public void show() {
            System.out.println( "学生姓名=" + name + ", 年龄=" + age);
        }
    }
第三题:需求实现
  • 集合工具类。
    • 定义findIndex方法,在某集合中,查找某元素,返回第一次出现的索引。
    • 定义replace方法,将某集合中的某元素,全部替换为新元素。
  • 代码实现,效果如图所示:
  • 参考答案:

    public class Test3 {
        public static int findIndex(List<Integer> list, int i){
            int index = -1;
            for (int j = 0; j < list.size(); j++) {
                if (list.get(j) == i) {
                    index = j;
                    break;
                }
            }
            return index;
        }
        public static void replace(List<Integer> list,Integer oldValue,Integer newValue){
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i) == oldValue) {
                    list.set(i, newValue);
                }
            }
        }
    }
第四题:需求实现
  • 统计数字出现次数。

    • 定义getNumList方法,随机生成100个数字,数字范围从1到10。
    • 定义printCount方法,统计每个数字出现的次数并打印到控制台。
  • 代码实现,部分效果如图所示:

  • 参考答案:

    public class Test4 {
        public static void main(String[] args) {
            ArrayList<Integer> numList = getNumList();
            //  统计字符数组中字母出现次数
            printCount(numList);
        }
        public static void printCount(ArrayList<Integer> list) {
            int[] count = new int[10];
            // 对应保存数字出现的次数
            for (int i = 0; i < list.size(); i++) {
                int c = list.get(i);
                count[c-1]++;
            }
            // 打印数字和次数
            for (int i = 0 ; i < count.length; i++) {
                    System.out.println("数字:"+(i+1) + "--" + count[i]+"次");
            }
        }
        public static ArrayList<Integer> getNumList() {
            ArrayList<Integer> list = new ArrayList<>();
            Random r = new Random();
            for (int i = 0; i < 100; i++) {
                int x = r.nextInt(10) + 1;
                list.add(x);
            }
            return list;
        }
    }
第五题:需求实现
  • 模拟统计班级考试分数分布情况,分别统计100-80,79-60,59-40,39-0各个阶段的人数。
    • 定义getScoreList方法,随机生成50个数字,数字范围从0到100。
    • 定义countScore方法,统计各个阶段的分数个数。
    • 定义printCount方法,打印各个阶段的统计结果。
  • 代码实现,效果如图所示:
  • 参考答案:

    public class Test5 {
        public static void main(String[] args) {
            // 获取随机分数
            ArrayList<Integer> scoreList = getScoreList();
            // 定义计数的变量
            ArrayList<Integer> countList = countScore(scoreList);
            // 打印统计结果
            printCount(countList);
        }
    
        private static void printCount(ArrayList<Integer> countList) {
            int start = 100;
            int end = 80;
            for (int i = 0; i < countList.size(); i++) {
                Integer integer = countList.get(i);
                System.out.println(start + "\t分 --" + end + " \t分:" + integer+"人");
                if (i == 0){
                    start-=21;
                    end -=20;
                }else if (i == countList.size()-2){
                    start-=20;
                    end-=40;
                }else {
                    start -= 20;
                    end -= 20;
    
                }
            }
        }
        public static ArrayList<Integer> countScore(ArrayList<Integer> scoreList) {
            ArrayList<Integer> countList = new ArrayList<>();
            int count100 = 0;
            int count79 = 0;
            int count59 = 0;
            int count39 = 0;
    
            for (int i = 0; i < scoreList.size(); i++) {
                Integer score = scoreList.get(i);
                if (score <= 100 && score >= 80) {
                    count100++;
                } else if (score <= 79 && score >= 60) {
                    count79++;
                } else if (score <= 59 && score >= 40) {
                    count59++;
                } else {
                    count39++;
                }
            }
    
            countList.add(count100);
            countList.add(count79);
            countList.add(count59);
            countList.add(count39);
    
            return countList;
        }
    
    
        public static ArrayList<Integer> getScoreList() {
            ArrayList<Integer> list = new ArrayList<>();
            Random r = new Random();
            for (int i = 0; i < 50; i++) {
                int x = r.nextInt(100);
                list.add(x);
            }
            return list;
        }
    }
第六题:需求实现
  • 随机生成n张扑克牌。
  • 代码实现,效果如图所示:
  • 开发提示:
    • 使用集合保存所有的扑克牌对象。
    • 从所有牌中,随机移除n张牌,保存到新集合。
    • 判断n的值,不能超越一副扑克牌的范围。
  • 参考答案:

    public class Test6 {
        public static void main(String[] args) {
            int n = 5;
            ArrayList<Card> cards = randomCard(n);
    
            if (cards != null) {
                System.out.println("随机"+ n +"张牌:" );
                for (int i = 0; i < cards.size(); i++) {
                    Card card = cards.get(i);
                    card.showCard();
                }
            }else {
                System.out.println(n+"超越范围,无法获取牌" );
            }
    
            System.out.println();
            System.out.println();
            int n2 = 55;
            ArrayList<Card> cards2 = randomCard(n2);
    
            if (cards2 != null) {
                System.out.println("随机"+ n2 +"张牌:" );
                for (int i = 0; i < cards.size(); i++) {
                    Card card = cards.get(i);
                    card.showCard();
                }
            }else {
                System.out.println("随机"+ n2 +"张牌:\r\n超越范围,无法获取" );
            }
        }
        public static ArrayList<Card> randomCard(int n) {
            if (n > 54 || n < 0)
                return null;
    
            ArrayList<Card> rList = new ArrayList<>();
            ArrayList<Card> cards = allCard();
    
            Random r = new Random();
            for (int i = 0; i < n; i++) {
                int index = r.nextInt(cards.size());
                Card rCard = cards.remove(index);
                rList.add(rCard);
            }
            return rList;
        }
    
        public static ArrayList<Card> allCard() {
            ArrayList<Card> allList = new ArrayList<>();
            // 花色数组
            String[] hs = {"黑桃", "红桃", "梅花", "方片"};
            // 点数数组
            String[] ds = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
    
            for (int H = 0; H < hs.length; H++) {
                for (int d = 0; d < ds.length; d++) {
                    Card card = new Card(hs[H], ds[d]);
                    // 添加到集合
                    allList.add(card);
                }
            }
            return allList;
        }
    }
    
    class Card {
        private String ds; // 点数
        private String hs; // 花色
        public Card(String ds, String hs) {
            this.ds = ds;
            this.hs = hs;
        }
        public void showCard() {
            System.out.print(ds + hs+" ");
        }
    }
第七题:需求实现
  • 自定义MyList类,实现存取元素的功能。

    • 定义add方法,可以保存元素,添加MyList尾部。
    • 定义remove方法,可以获取到最后添加的元素,并从MyList中移除该元素。
    • 定义show方法,可以展示MyList中的元素。
  • 代码实现,效果如图所示:

  • 参考答案:

    public class Test7 {
        public static void main(String[] args) {
            MyList myList = new MyList();
            for (int i = 0; i < 3; i++) {
                myList.add(i);
            }
            System.out.println("添加元素后:");
            myList.show();
    
            Integer remove = myList.remove();
            System.out.println("获取元素:");
            System.out.println(remove);
            System.out.println("获取元素后:");
            myList.show();
        }
    }
    
    class MyList {
        ArrayList<Integer> ml = new ArrayList<>();
    
        public void add(Integer i) {
            ml.add(i);
        }
        public Integer remove() {
            Integer remove = ml.remove(ml.size() - 1);
            return remove;
        }
    
        public void show(){
            System.out.println(ml);
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容