作业提交,具体比较扑克大小通过Collections.max(),实现Compatator接口在其中通过map接口的value值比较

来源:7-1 简易扑克牌游戏

给大佬递茶

2018-11-02 19:03

Test类

package com.wgd.t2;

import java.util.ArrayList;

import java.util.Collections;https://img3.mukewang.com/5bdc2ed000012e2107460696.jpg

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

}

}

}


写回答 关注

2回答

  • 蟹皇面plus
    2019-01-12 17:49:14

    请问您是重写了compareTo方法来比较吗?


  • 慕标407132
    2018-12-11 16:38:43

    Comparator接口的类中,直接比较花色时,不知道用不用考虑“A”应该比“J”"Q","K"大?直接用compareTo会不会不合适?https://img1.mukewang.com/5c0f778b0001a82904550057.jpg

    qq_Tak...

    你说的对

    2019-01-04 11:22:10

    共 1 条回复 >

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题