给大佬递茶
2018-11-02 19:03
Test类
package com.wgd.t2;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
// TODO 自动生成的方法存根
//存放所有的牌
List<String>list=new ArrayList<String>();
//存放玩家的牌
List<String>papuke1=new ArrayList<String>();
List<String>papuke2=new ArrayList<String>();
//存放玩家与玩家的牌
Map<Integer,List<String>>map=new HashMap<Integer,List<String>>();
String[] str={"红心","黑桃","梅花","方片"};
String []str2={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
for(int i=0;i<str.length;i++)
for(int j=0;j<str2.length;j++){
StringBuffer sb=new StringBuffer();
sb.append(str[i]);
sb.append(str2[j]);
list.add(sb.toString());
}
System.out.println("--------创建扑克牌----------");
System.out.println("----------扑克牌创建成功!----------------");
System.out.print("为:[");
for (String string : list) {
if(list.indexOf(string)%13==0)
System.out.println();
System.out.print(string+" ");
}
System.out.println("]");
System.out.println("--------开始洗牌--------");
System.out.println("------------洗牌结束------------");
System.out.println("------------创建玩家--------------");
Player pa1=new Player();
Player pa2=new Player();
Scanner scan=new Scanner(System.in);
boolean falg=true;
while(falg){
System.out.println("请输入第一位玩家的id:");
try{
Integer id1=new Integer(scan.nextInt());
System.out.println("请输入第一位玩家的姓名:");
String name1=scan.next();
pa1.setId(id1);
pa1.setName(name1);
System.out.println("请输入第二位玩家的id:");
Integer id2=new Integer(scan.nextInt());
System.out.println("请输入第二位玩家的姓名:");
String name2=scan.next();
pa2.setId(id2);
pa2.setName(name2);
}
catch(Exception e){
System.out.println("请输入正整数id");
}
finally{
falg=false;
}
}
System.out.println("--欢迎玩家"+pa1.getName());
System.out.println("--欢迎玩家"+pa2.getName());
System.out.println("--------开始发牌---------");
Random random=new Random();
//两位玩家开始拿牌
System.out.println("---玩家"+pa1.getName()+"拿牌---");
int p1=random.nextInt(list.size());
papuke1.add(list.get(p1));
list.remove(list.get(p1));
System.out.println("---玩家"+pa2.getName()+"拿牌---");
int p2=random.nextInt(list.size());
papuke2.add(list.get(p2));
list.remove(list.get(p2));
System.out.println("---玩家"+pa1.getName()+"拿牌---");
int pp1=random.nextInt(list.size());
papuke1.add(list.get(pp1));
list.remove(list.get(pp1));
System.out.println("---玩家"+pa2.getName()+"拿牌---");
int pp2=random.nextInt(list.size());
papuke2.add(list.get(pp2));
list.remove(list.get(pp2));
//拿牌结束
System.out.println("---发牌结束---");
System.out.println("-----开始游戏----");
//将两位玩家以及他们拥有的牌放到map中
map.put(pa1.getId(), papuke1);
map.put(pa2.getId(), papuke2);
//通过实现了comparator接口的类指定规则找到list中最大值
String pa1_max_pai=Collections.max(papuke1,new ComparatorT());
System.out.println("玩家"+pa1.getName()+"最大的手牌为:"+pa1_max_pai);
String pa2_max_pai=Collections.max(papuke2,new ComparatorT());
System.out.println("玩家"+pa2.getName()+"最大的手牌为:"+pa2_max_pai);
//建立临时list存贮两位玩家手中的最大牌
List<String>templist=new ArrayList<String>();
templist.add(pa1_max_pai);
templist.add(pa2_max_pai);
//通过实现了comparator接口的类指定规则找到templist中最大值
String tempmax=Collections.max(templist,new ComparatorT());
if(pa1_max_pai.equals(tempmax)){
System.out.println("----玩家"+pa1.getName()+"获胜----");
}
else{
System.out.println("----玩家"+pa2.getName()+"获胜----");
}
System.out.println("玩家各自的手牌为");
System.out.println(pa1.getName()+""+papuke1.get(0)+" "+papuke1.get(1));
System.out.println(pa2.getName()+""+papuke2.get(0)+" "+papuke2.get(1));
}
}
实现了Comparator接口的类
package com.wgd.t2;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ComparatorT implements Comparator<String> {
public ComparatorT() {
// TODO 自动生成的构造函数存根
}
@Override
public int compare(String arg0,String arg1) {
//通过map来存放中文和数字,便于比较
Map <String,Integer>map=new HashMap<String,Integer>();
map.put("红心",4);map.put("黑桃",3);map.put("梅花",2);map.put("方片",1);
map.put("2",5);map.put("3",6);map.put("4",7);map.put("5",8);
map.put("6",9);
map.put("7",10);map.put("8",11);map.put("9",12);map.put("10",13);
map.put("J",14);map.put("Q",15);map.put("K",16);map.put("A",17);
//pre表示前面的中文,last表示数字
String arg0pre=arg0.substring(0,2);
String arg0last=arg0.substring(2);
String arg1pre=arg1.substring(0,2);
String arg1last=arg1.substring(2);
//点数相同比较花色,不同直接比较点数
if(arg0last.equals(arg1last)){
return map.get(arg0pre).compareTo(map.get(arg1pre));
}
else{
return map.get(arg0last).compareTo(map.get(arg1last));
}
}
}
请问您是重写了compareTo方法来比较吗?
Comparator接口的类中,直接比较花色时,不知道用不用考虑“A”应该比“J”"Q","K"大?直接用compareTo会不会不合适?
Java入门第三季
409792 学习 · 4340 问题
相似问题