Day21

案例:统计字符串中每个字符出现的次数

需求:键盘录入一个字符串,要求统计字符串中每个字符串出现的次数

举例:键盘录入“aababcabcdabcde” 在控制台输出:“a(5)b(4)C(3)D(2)e(1)

package hashmapdemo;

import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

/*
需求:键盘录入一个字符串,要求统计字符串中每个字符串出现的次数

举例:键盘录入“aababcabcdabcde” 在控制台输出:“a(5)b(4)C(3)D(2)e(1)
 */
public class HashMapDemo03 {
    public static void main(String[] args) {
        //键盘录入数据
        Scanner input=new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String str= input.nextLine();

        //创建hashmap集合,键是Character 值是Integer
        //HashMap<Character,Integer> hm=new HashMap<Character,Integer>();
        //如果想要按照输入字符排序的 就用TreeSet
        TreeMap<Character,Integer> hm=new TreeMap<Character,Integer>();

        //遍历字符串得到每一个字符
        for (int i = 0; i <str.length() ; i++) {
            char key=str.charAt(i);
            Integer value=hm.get(key);

            if(value==null){
                //如果返回值null,说明该集合中不存在该字符,就把字符作为键,1储存为值
                hm.put(key,1);
            }else{
                //如果返回值不为null,说明该集合中存在该字符,值++;
                value++;
                hm.put(key,value);
            }
        }

        //遍历hashmap集合 ,按照要求拼接
        StringBuilder sb=new StringBuilder();

        Set<Character> keySet =hm.keySet();
        for (Character key: keySet){
            Integer value=hm.get(key);
            sb.append(key).append("(").append(value).append(")");
        }
        String result =sb.toString();
        System.out.println(result);
    }
}
Collections类的概述

是针对集合操作的工具

Collections类的常用方法

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CollectionsDemo01 {
    public static void main(String[] args) {
        //创建集合对象
        List<Integer> list=new ArrayList<Integer>();

        //添加元素
        list.add(30);
        list.add(10);
        list.add(50);
        list.add(40);
        list.add(90);
        list.add(70);

        //public static <T extends Comparable<? super T>> void sort(List<T> list)
        Collections.sort(list);

        //public static void reverse(List<?> list);翻转指定列表中元素的顺序
        Collections.reverse(list);

        //public static void shuffle(List<?> list);
        Collections.shuffle(list);

        System.out.println(list);

    }
}
案例:ArrayList存储学生对象并且排序

要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母排序

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class CollectionDemo02 {
    public static void main(String[] args) {
        //创建ArrayList集合对象
        ArrayList<Student> array =new ArrayList<Student>();

        //创建学生对象
        Student s1=new Student("Lucas",18);
        Student s2=new Student("LYK",20);
        Student s3=new Student("Simon",22);
        Student s4=new Student("Leo",24);

        //把学生添加到集合中
        array.add(s1);
        array.add(s2);
        array.add(s3);
        array.add(s4);

        //使用Collections对ArrayList集合排序
        Collections.sort(array, new Comparator<Collections.Student>() {
            @Override
            public int compare(Collections.Student s1, Collections.Student s2) {
                //按照年龄从小到大排序,年龄相同时,按照姓名的字母排序
                int num=s1.getAge()-s2.getAge();
                int num2=num==0?s1.getName()-s2.getName():num;
                return num2;
                return 0;
            }
        });
        for (Student s:array){
            System.out.println(s.getName()+" "+s.getAge());
        }
    }
}
案例:模拟斗地主

需求: 通过程序实现斗地主过程中的洗牌,发牌和看牌

思路:

  1. 创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现
  2. 往牌盒里面装牌
  3. 洗牌,也就是把牌打撒,用Collections的shuffle()方法实现
  4. 发牌,也就是遍历集合,给三个玩家发牌
  5. 看牌,也就是三个玩家分别遍历自己的牌
import java.util.ArrayList;
import java.util.Collections;
import java.util.IllformedLocaleException;

/*
1. 创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现
2. 往牌盒里面装牌
3. 洗牌,也就是把牌打撒,用Collections的shuffle()方法实现
4. 发牌,也就是遍历集合,给三个玩家发牌
5. 看牌,也就是三个玩家分别遍历自己的牌
 */
public class PokerDemo {
    public static void main(String[] args) {
        //创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现
        ArrayList<String> array=new ArrayList<String>();

        //往牌盒里面装牌
        //定义花色数组
        String [] colors={"♦","♠","♥","♣"};
        //定义点数数字
        String [] numbers={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
        for (String i:colors){
            for (String j:numbers){
                array.add(i+j);
            }
        }
        array.add("BigJoker");
        array.add("SmallJoker");

        //洗牌,也就是把牌打撒,用Collections的shuffle()方法实现
        Collections.shuffle(array);

        //发牌,也就是遍历集合,给三个玩家发牌
        ArrayList<String> Lucas=new ArrayList<String>();
        ArrayList<String> LYK=new ArrayList<String>();
        ArrayList<String> Simon=new ArrayList<String>();
        ArrayList<String> dp=new ArrayList<String>();

        for (int i = 0; i < array.size(); i++) {
            String poker = array.get(i);
            if(i>= array.size()-3){
                dp.add(poker);
            }else if(i%3==0){
                Lucas.add(poker);
            }else if(i%3==1){
                LYK.add(poker);
            }else if (i%3==2){
                Simon.add(poker);
            }
        }
        //看牌,也就是三个玩家分别遍历自己的牌
        LookPoker("Lucas",Lucas);
        LookPoker("LYK",LYK);
        LookPoker("Simon",Simon);
        LookPoker("底牌",dp);
    }
    //看牌的方法
    public static void LookPoker(String name,ArrayList<String> array){
        System.out.println(name+"的牌是:");
        for (String i:array){
            System.out.print(i+" ");
        }
        System.out.println();
    }
}
模拟斗地主升级版

要求:对牌进行排序

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;

public class PokerPlusDemo {
    public static void main(String[] args) {
        //创建HashMap,键是编号,值是牌
        HashMap<Integer,String> hm=new HashMap<Integer,String>();

        //创建ArrayList集合,存储编号
        ArrayList<Integer> array=new ArrayList<Integer>();

        //创建花色数组和点数数组
        String [] colors={"♦","♠","♥","♣"};

        String [] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};

        //从0开始往HashMap中存储编号,并存储对应的牌。同时往ArrayList里面存储编号
        int index=0;
        for (String i:numbers){
            for (String j:colors){
                hm.put(index,i+j);
                array.add(index);
                index++;
            }
        }
        hm.put(index,"BigJoker");
        array.add(index);
        index++;
        hm.put(index,"SmallJoker");
        array.add(index);

        //洗牌,洗的是编号,用Collections的shuffle方法实现
        Collections.shuffle(array);

        //发牌,发的也是编号,为了保证编号是排序的,创建TreeSet集合接受
        TreeSet<Integer> Lucas = new TreeSet<Integer>();
        TreeSet<Integer> LYK = new TreeSet<Integer>();
        TreeSet<Integer> Simon = new TreeSet<Integer>();
        TreeSet<Integer> dp = new TreeSet<Integer>();

        for (int i = 0; i < array.size(); i++) {
            int x= array.get(i);
            if(i>= array.size()-3){
                dp.add(x);
            }else if(i%3==0){
                Lucas.add(x);
            }else if(i%3==1){
                LYK.add(x);
            }else if(i%3==2){
                Simon.add(x);
            }

        }

        //看牌
        LookPoker("Lucas",Lucas,hm);
        LookPoker("LYK",LYK,hm);
        LookPoker("Simon",Simon,hm);
        LookPoker("底牌",dp,hm);
    }
    public static void LookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String> hm){
        System.out.println(name+"的牌是:");
        for (Integer key:ts){
            String s = hm.get(key);
            System.out.print(s+" ");
        }
        System.out.println();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值