模拟斗地主和冒泡排序

模拟斗地主和冒泡排序

一、模拟斗地主

public class Demo斗地主 {
    public static void main(String[] args) {
   //定义四个花色
        String[] color = {"♥","♦","♠","♣"};
 //定义十三个数字
        String[] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};

 TreeMap<Integer,String> map = new TreeMap<>();
 //单列集合ArrayList
        ArrayList<Integer> list = new ArrayList<>();
    //给集合添加52牌
        int count = 1;
        for (String s1 : num) {
            for (String s : color) {
                map.put(count,s+s1);
                //把编号放到list集合中
                list.add(count);
                count++;
            }
        }
     //存放大王小王
        map.put(count,"小王");
        list.add(count);
        count++;
        map.put(count,"大王");
        list.add(count);
      

       //洗牌
        Collections.shuffle(list);

        //发牌
        ArrayList<Integer> list1 = new ArrayList<>(); //卢本伟
        ArrayList<Integer> list2 = new ArrayList<>(); //柳岩
        ArrayList<Integer> list3 = new ArrayList<>(); //阿姨
        ArrayList<Integer> list4 = new ArrayList<>(); //底牌

        //把最后三张牌放到底牌中
        for (int i = list.size()-3; i < list.size(); i++) {
            Integer pai = list.get(i);
            list4.add(pai);
        }
        
          //看牌
        //看卢本伟的牌
        look("卢本伟",list1,map);
        //看柳岩的牌
        look("柳岩",list2,map);
        //看阿姨的牌
        look("阿姨",list3,map);
        //看底牌
        look("底牌",list4,map);
    
}    
         //定义看牌的方法
    public static void look(String name,ArrayList<Integer> list,TreeMap<Integer,String> map){
        System.out.print(name+ ":");
        for (Integer i : list) {
            String s = map.get(i);
            System.out.print(s+" ");
        }
        System.out.println();
    }
}

  模拟斗地主就是将54张牌编码,放到list集合中,发的是list集合的数字,同时list集合的编码当做Map集合的键,看牌就是根据键将值取出来

二、冒泡排序

冒泡排序是对数组排序的方式之一,冒泡排序其实是一个算法,能够提高变成思维。

public class Demo冒泡排序 {
    public static void main(String[] args) {
        //定义数组
        int[] arr = {23,7,234,3,65,7,6,786,8};

        //冒泡排序
        //外循环跑的趟数
        for (int i = 0; i < arr.length-1; i++) {
            //内循环每趟比较的次数
            for(int j=0; j< arr.length-1-i; j++){
                //比较
                if(arr[j] > arr[j+1]){
                    //交换
                    int temp = arr[j+1];
                    arr[j+1] = arr[j];
                    arr[j] = temp;
                }
            }
        }

        //打印数组
        System.out.println(Arrays.toString(arr));
    }
}

 三、选择排序

也是对数组进行排序的一个方式

public class Demo选择排序 {
    public static void main(String[] args) {
        //准备一个数组
        int[] arr = {243,5,46,5,76,8,79,8,90};

        //选择排序
        //外循环是比较的趟数
        for (int i = 0; i < arr.length-1; i++) {
            //内循环是每趟比较的次数
            for(int j = i+1 ; j < arr.length; j++){
                //比较
                if(arr[i] > arr[j]){
                    //交换
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }

        //打印集合
        System.out.println(Arrays.toString(arr));
    }
}

四、二分查找法

public class Demo普通查找 {
    public static void main(String[] args) {
        int[] arr = {5, 8, 46, 76, 79, 90, 243};

        //查找某个元素的位置
        int i = find(arr, 80);
        System.out.println("位置是" + i);
    }

    //普通查找方法
    /*
        参数: arr 代表要找的数组
              num 代表要找的数字
        返回值:
              int代表数字在数组中出现索引位置,如果不包含返回-1
     */
    public static int find(int[] arr,int num){
        //遍历数组
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == num){
                return i;
            }
        }

        //循环找不到这个数字
        return -1;
    }
}

4.2.二分查找

  • 二分查找前提条件

    • 数组必须是已经排好序的

public class Demo二分查找 {

    public static void main(String[] args) {
        //准备数组
        int[] arr = {3, 4, 9, 56, 68, 79, 89, 234};

        int i = find(arr, 3);
        System.out.println("索引是" + i);

    }


    //二分查找
    public static int find(int[] arr,int num){
        //定义头尾
        int start = 0;
        int end = arr.length-1;
        //循环
        while(true){
            //循环结束判断
            if(start > end){
                return -1;//代表找不到
            }
            //定义中间索引
            int mid = (start+end)/2;
            //比较
            if(num < arr[mid]){
                end = mid-1;
            }else if(num > arr[mid]){
                start = mid+1;
            }else{
                //代表要找的值正好就是中间值
                return mid;
            }
        }
    }
}

  

原文地址:https://www.cnblogs.com/gushiye/p/13823655.html