模拟斗地主和冒泡排序
模拟斗地主和冒泡排序
一、模拟斗地主
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; } } } }