• 模拟斗地主和冒泡排序


    模拟斗地主和冒泡排序

    一、模拟斗地主

    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;
                }
            }
        }
    }
    

      

  • 相关阅读:
    (转帖) oracle是否归档模式及修改模式
    (转帖) Oracle实例恢复(Oracle instance recovery)
    实习第一周总结
    UML类图几种关系的总结
    表格排序
    利用js查找页面中的内链,外链
    事件机制(事件冒泡与事件捕获)
    谈 CSS 模块化
    初学后台框架总结篇二——快速了解CI框架
    初学后台框架总结篇一——学习过程
  • 原文地址:https://www.cnblogs.com/gushiye/p/13823655.html
Copyright © 2020-2023  润新知