循环网球赛源码原创.docx

上传人:b****5 文档编号:12093414 上传时间:2023-04-17 格式:DOCX 页数:17 大小:17.73KB
下载 相关 举报
循环网球赛源码原创.docx_第1页
第1页 / 共17页
循环网球赛源码原创.docx_第2页
第2页 / 共17页
循环网球赛源码原创.docx_第3页
第3页 / 共17页
循环网球赛源码原创.docx_第4页
第4页 / 共17页
循环网球赛源码原创.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

循环网球赛源码原创.docx

《循环网球赛源码原创.docx》由会员分享,可在线阅读,更多相关《循环网球赛源码原创.docx(17页珍藏版)》请在冰豆网上搜索。

循环网球赛源码原创.docx

循环网球赛源码原创

需求:

假设有n=2k个运动员要进行网球循环赛。

设计一个满足一下要求的比赛日程表:

(1).每个选手必须与其他n-1个选手各赛一次

(2).每个选手一天只能赛一次

(3).循环赛一共进行n-1天

利用Java语言开发一个界面,输入运动员的个数,输出比赛日程表。

对于输入运动员数目不满足n=2k时,弹出信息提示用户。

共两个类,需放到com包下。

运行Match类。

第一个类:

packagecom;

importjava.awt.BorderLayout;

importjava.awt.FlowLayout;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.util.List;

importjavax.swing.JButton;

importjavax.swing.JFrame;

importjavax.swing.JLabel;

importjavax.swing.JList;

importjavax.swing.JPanel;

importjavax.swing.JTextField;

/**

*网球赛

*@authorCris

*@ClassName:

Match

*@Version

*@ModifiedBy

*@Copyright@2010H<echnologyInc.

*@date2011-5-24上午11:

29:

39

*@description

*/

publicclassMatchimplementsActionListener{

privateJFramef;

privateJTextFieldtf;

privateJPanelcontainer;

privateJListmyList;

privateJLabelmessage;

privateJButtonb;

/**

*@authorCris

*@title:

main

*@date2011-5-23上午11:

07:

27

*@paramargsvoid

*/

publicstaticvoidmain(String[]args){

Matcht=newMatch();

t.go();

}

publicvoidgo(){

f=newJFrame("比赛");

f.setLocation(100,200);

f.setSize(600,500);

container=newJPanel(newBorderLayout());

f.setContentPane(container);

JPaneltitle=newJPanel(newFlowLayout());

tf=newJTextField(10);

title.add(tf);

b=newJButton("确定");

b.addActionListener(this);

title.add(b);

message=newJLabel();

title.add(message);

container.add(title,BorderLayout.NORTH);

myList=newJList();

container.add(myList,BorderLayout.CENTER);

f.setVisible(true);

}

/**

*显示比赛结果

*@authorCris

*@title:

show

*@date2011-5-24上午11:

31:

05

*@paramnvoid

*/

privatevoidshow(intn){

Crisc=newCris(n);

List>result=c.getResult();

String[]str=newString[result.size()];

for(inti=0;i

StringBuildersb=newStringBuilder();

sb.append("第").append(i+1).append("天:

");

ListmatchList=result.get(i);

for(String[]match:

matchList){

sb.append("[").append(match[0]).append("-").append(match[1]).append("]");

}

str[i]=sb.toString();

}

myList.setListData(str);

message.setText("");

f.setVisible(true);

}

/**

*清空数据

*@authorCris

*@title:

clear

*@date2011-5-24上午11:

30:

36void

*/

privatevoidclear(){

String[]str={""};

myList.setListData(str);

message.setText("");

}

publicvoidactionPerformed(ActionEvente){

clear();

Strings=tf.getText();

if(s==null||"".equals(s=s.trim())){

message.setText("请输入一个偶数");

}

try{

intn=Integer.parseInt(s);

if(n<=0||n%2!

=0){

message.setText("请输入一个偶数");

}else{

show(n);

}

}catch(Exceptionex){

message.setText("请输入一个偶数");

}

f.setVisible(true);

}

}

第二个类:

packagecom;

importjava.util.ArrayList;

importjava.util.HashMap;

importjava.util.LinkedList;

importjava.util.List;

importjava.util.Map;

importjava.util.Random;

publicclassCris{

/**选手数量*/

privateintn;

/**各个运动员还没进行的比赛key:

球员名称,value:

需进行的比赛集合*/

privateMap>playerMacth;

/**球员人名*/

privateString[]players;

/**最终每天的比赛分布集合*/

privateList>result;

/**所有可选的比赛*/

privateList>allMatchData[];

/**每天的比赛*/

ListdayMatch;

/**一个随机对象*/

privateRandomr;

/**当前运算到的天数*/

privateintnowDay;

publicCris(intn){

this.n=n;

playerMacth=newHashMap>();;

result=newArrayList>();

allMatchData=newLinkedList[n-1];

r=newRandom();

init();

go();

}

/**

*初始化球员

*@authorCris

*@title:

init

*@date2011-5-23下午04:

22:

32void

*/

privatevoidinit(){

//定义球员人名,以数字代表,从1开始

players=newString[n];

for(inti=0;i

//定义球员的名字

players[i]=String.valueOf(i+1);

//存放每个球员要进行的比赛的集合

ListmatchList=newLinkedList();

//球员赛事集合

playerMacth.put(players[i],matchList);

//球员集合,不变

//playerListConst.add(players[i]);

}

//定义每个人的比赛

for(inti=0;i

for(intj=i+1;j

String[]match={players[i],players[j]};//定义一个比赛

//把此赛事添加到相应球员需比赛集合中

playerMacth.get(players[i]).add(match);

playerMacth.get(players[j]).add(match);

}

}

}

/**

*随机获得一个当前天数可进行的比赛组合,并把此比赛组合从总集合中移除

*如果当前天数无比赛,则先获得比赛,再随机

*@authorCris

*@title:

getNowDayMatch

*@date2011-5-24上午09:

48:

23

*@returnList

*/

privateListgetNowDayMatch(){

if(allMatchData[nowDay]==null){

setAllMatchNowDay();

}

if(!

allMatchData[nowDay].isEmpty()){

intindex=r.nextInt(allMatchData[nowDay].size());

Listlist=allMatchData[nowDay].get(index);

allMatchData[nowDay].remove(index);

returnlist;

}else{

returnnull;

}

}

/**

*取消前一天的比赛

*@authorCris

*@title:

cancelYesterday

*@date2011-5-24上午09:

56:

12void

*/

privatevoidcancelYesterday(){

//清空当前天数的可选比赛组合

allMatchData[nowDay]=null;

//时间恢复到前一天

nowDay--;

//获得前一天的比赛

ListmatchList=result.get(nowDay);

//取消前一天的比赛

result.remove(nowDay);

//恢复每个运动员未进行的比赛

for(String[]match:

matchList){

playerMacth.get(match[0]).add(match);

playerMacth.get(match[1]).add(match);

}

}

publicvoidgo(){

//循环比赛天数

for(nowDay=0;nowDay

//1.随机一个比赛

ListmatchList=getNowDayMatch();

//无比赛组合,返回上一天取消上一天的比赛,时间回退到前一天,跳过此次循环

if(matchList==null){

cancelYesterday();

continue;

}

//3遍历比赛去除运动员去除运动员的未进行比赛

for(String[]match:

matchList){

playerMacth.get(match[0]).remove(match);

playerMacth.get(match[1]).remove(match);

}

result.add(matchList);

nowDay++;

}

}

/**

*从1号队员开始,获得当前天数所有可组合的赛事

*@authorCris

*@title:

setAllMatchNowDay

*@date2011-5-24上午09:

42:

51void

*/

privatevoidsetAllMatchNowDay(){

allMatchData[nowDay]=newLinkedList>();

intn=1;//1号运动员

//此运动员未进行的比赛

ListmatchList=playerMacth.get(String.valueOf(n));

for(String[]match:

matchList){

ListselectedList=newArrayList();

selectedList.add(match);

doDetAllMatchNowDay(n+1,selectedList);

}

}

/**

*今天比赛的所有组合

*@authorCris

*@title:

doDetAllMatchNowDay

*@date2011-5-24上午09:

46:

05

*@paramplayerNum

*@paramselectedListvoid

*/

privatevoiddoDetAllMatchNowDay(intplayerNum,ListselectedList){

//运动员名称

Stringplayer=String.valueOf(playerNum);

booleanflag=true;

//判断此运动员是不是已被选过

for(String[]match:

selectedList){

if(match[0].equals(player)||match[1].equals(player)){

flag=false;

break;

}

}

//已被选过

if(flag==false){

//最后一个人员

if(playerNum==n){

allMatchData[nowDay].add(selectedList);

}else{

doDetAllMatchNowDay(playerNum+1,selectedList);

}

return;

}

//此运动员未进行的比赛

ListmatchList=playerMacth.get(player);

//此运动员可选择的比赛

ListcanDoList=newArrayList();

for(String[]match:

matchList){

flag=true;

for(String[]selected:

selectedList){

if(match[0].equals(player)){

if(match[1].equals(selected[0])){

flag=false;

}elseif(match[1].equals(selected[1])){

flag=false;

}

}else{

if(match[0].equals(selected[0])){

flag=false;

}elseif(match[0].equals(selected[1])){

flag=false;

}

}

}

if(flag){

canDoList.add(match);

}

}

//遍历此运动员可选择的比赛

for(String[]match:

canDoList){

ListnewList=copyArrayList(selectedList);

//记录当前比赛

newList.add(match);

//最后一个人员

if(playerNum==n){

allMatchData[nowDay].add(newList);

}else{

doDetAllMatchNowDay(playerNum+1,newList);

}

}

}

/**

*复制集合

*@authorCris

*@title:

copyArrayList

*@date2011-5-24上午09:

24:

44

*@paramlist

*@returnList

*/

privateListcopyArrayList(Listlist){

ListnewList=newArrayList();

for(String[]s:

list){

newList.add(s);

}

returnnewList;

}

publicList>getResult(){

returnresult;

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1