作業(yè)提交,具體比較撲克大小通過Collections.max(),實現(xiàn)Compatator接口在其中通過map接口的value值比較
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("--------創(chuàng)建撲克牌----------");
System.out.println("----------撲克牌創(chuàng)建成功!----------------");
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("------------洗牌結(jié)束------------");
System.out.println("------------創(chuàng)建玩家--------------");
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("請輸入正整數(shù)id");
}
finally{
falg=false;
}
}
System.out.println("--歡迎玩家"+pa1.getName());
System.out.println("--歡迎玩家"+pa2.getName());
System.out.println("--------開始發(fā)牌---------");
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));
//拿牌結(jié)束
System.out.println("---發(fā)牌結(jié)束---");
System.out.println("-----開始游戲----");
//將兩位玩家以及他們擁有的牌放到map中
map.put(pa1.getId(), papuke1);
map.put(pa2.getId(), papuke2);
//通過實現(xiàn)了comparator接口的類指定規(guī)則找到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);
//通過實現(xiàn)了comparator接口的類指定規(guī)則找到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));
}
}
實現(xiàn)了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 自動生成的構(gòu)造函數(shù)存根
}
@Override
public int compare(String arg0,String arg1) {
//通過map來存放中文和數(shù)字,便于比較
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表示數(shù)字
String arg0pre=arg0.substring(0,2);
String arg0last=arg0.substring(2);
String arg1pre=arg1.substring(0,2);
String arg1last=arg1.substring(2);
//點數(shù)相同比較花色,不同直接比較點數(shù)
if(arg0last.equals(arg1last)){
return map.get(arg0pre).compareTo(map.get(arg1pre));
}
else{
return map.get(arg0last).compareTo(map.get(arg1last));
}
}
}
2019-01-12
請問您是重寫了compareTo方法來比較嗎?
2018-12-11
Comparator接口的類中,直接比較花色時,不知道用不用考慮“A”應(yīng)該比“J”"Q","K"大?直接用compareTo會不會不合適?