两队比赛,根据口风探比赛表

6 篇文章 0 订阅
6 篇文章 0 订阅

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Stack;


/**
 * 功能描述:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向
 * 队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单
 * @author Administrator
 *
 */
public class Compare {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Team teamA=new Team();//A队
  Man a=new Man("a");
  teamA.addTeamMem(a);
  a=new Man("b");
  teamA.addTeamMem(a);
  a=new Man("c");
  teamA.addTeamMem(a);
  Team teamB=new Team();//B队
  a=new Man("x");
  teamB.addTeamMem(a);
  a=new Man("y");
  teamB.addTeamMem(a);
  a=new Man("z");
  teamB.addTeamMem(a);
  //假设两组队员和对方队员全部PK,当然这是不可能的
  for(int i=0;i<teamA.getTeamSize();i++){
   Man man=teamA.getTeamMem(i);
   for(int j=0;j<teamB.getTeamSize();j++){
   man.addMatch(teamB.getTeamMem(j));
   }
  }
  for(int i=0;i<teamB.getTeamSize();i++){
   Man man=teamB.getTeamMem(i);
   for(int j=0;j<teamA.getTeamSize();j++){
   man.addMatch(teamA.getTeamMem(j));
   }
  }
  //根据条件排除A队队员的对手
  for(int i=0;i<teamA.getTeamSize();i++){
   Man man=teamA.getTeamMem(i);
   if(man.getName()!=null&&man.getName().equals("a")){
    Man notMach=man.getMatchByName("x");
    if(notMach!=null){
     notMach.deleteMatch("a");
    }
    man.deleteMatch("x");
   }else if(man.getName()!=null&&man.getName().equals("c")){
    Man notMach=man.getMatchByName("x");
    if(notMach!=null){
     notMach.deleteMatch("c");
    }
    man.deleteMatch("x");
    notMach=man.getMatchByName("z");
    if(notMach!=null){
     notMach.deleteMatch("c");
    }
    man.deleteMatch("z");
   }
  }
  //如果两个队中队员的假设的对手只为一个,那么已经找到对手,并且该对手就是该队员的最终对手
  for(int i=0;i<teamA.getTeamSize();i++){
   Man man=teamA.getTeamMem(i);
   if(man.listMatch().size()==1){
    Man match=man.listMatch().get(0);
    man.setRealMatch(match);match.setRealMatch(man);
    
   }
  }
  for(int i=0;i<teamB.getTeamSize();i++){
   Man man=teamB.getTeamMem(i);
   if(man.listMatch().size()==1){
    Man match=man.listMatch().get(0);
    man.setRealMatch(match);match.setRealMatch(man);
    }
  }
  //如果队员没有找到对手,那么他就去找对方没有找到对手的队员PK
  for(int i=0;i<teamA.getTeamSize();i++){
   Man man=teamA.getTeamMem(i);
   if(man.getRealMatch()==null){
    for(int j=0;j<teamB.getTeamSize();j++){
     Man manp=teamB.getTeamMem(j);
     if(manp.getRealMatch()==null){
      man.setRealMatch(manp);
     }
    }
   }
   
  }
  //查看A队队员的真正对手
  for(int i=0;i<teamA.getTeamSize();i++){
   Man man=teamA.getTeamMem(i);
  System.out.println("A队中"+man.getName()+"队员对B队中"+man.getRealMatch().getName()+"队员");
  }
 }

}
/**
 * 队类
 * @author Administrator
 *
 */
class Team{
 
 private Stack<Man> menbers=new Stack<Man>();//队员列表
 public void addTeamMem(Man man){
  this.menbers.push(man);
 }
 public Man getTeamMem(int index){
  return  this.menbers.elementAt(index);
 }
 public int getTeamSize(){
  return menbers.size();
 }
}
/**
 * 队员类
 * @author Administrator
 *
 */
class Man{
 private String name;//队员名称
 private Map<String, Man> match=null;//待定比赛对手队员范围
 private Man realMatch=null;//最终决定的对手
 public Man getRealMatch() {
  return realMatch;
 }
 public void setRealMatch(Man realMatch) {
  this.realMatch = realMatch;
 }
 public Man(String name) {
  this.name = name;
  this.match = new HashMap<String, Man>();
 }
 public Man getMatchByName(String name){
  if(match!=null&&match.containsKey(name))return match.get(name);else return null;
 }
 public List<Man> listMatch(){
  List<Man> l=new ArrayList<Man>();
  for (Map.Entry<String,Man> m:match.entrySet()){
   l.add(m.getValue());
  }
  return l;
 }
 public void deleteMatch(String name){
  if(match!=null&&match.containsKey(name))match.remove(name);
 }
 public void addMatch(Man man){
  match.put(man.getName(), man);
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值