模拟斗地主和冒泡排序
模拟斗地主和冒泡排序
一、模拟斗地主

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



浙公网安备 33010602011771号