= = = =代碼= = = =
包com
導入Java . awt . borderlayout;
導入Java . awt . flow layout;
導入Java . awt . event . action event;
導入Java . awt . event . action listener;
導入Java . util . list;
導入javax . swing . jbutton;
導入javax . swing . jframe;
導入javax . swing . jlabel;
導入javax . swing . jlist;
導入javax . swing . jpanel;
導入javax . swing . jtextfield;
/**
*網球比賽
* @作者克裏斯
* @ClassName: Match
* @版本
* @修改者
* @ Copyright @ 2010H & amp;l技術公司。
* @ date 2011-5-24AM 11:29:39
* @描述
*/
公共類Match實現ActionListener{
private JFrame f;
private JTextField tf
私有JPanel容器;
二等兵JList myList
私有JLabel消息;
私有JButton b;
/**
* @作者克裏斯
* @title: main
* @date 2011-5-23上午11:07:27
* @param參數void
*/
公共靜態void main(String[] args) {
Match t = new Match();
t . go();
}
公共void go(){
F = new JFrame("競賽");
f.setLocation(100,200);
f.setSize(600,500);
容器= new JPanel(new BorderLayout());
f.setContentPane(容器);
JPanel title = new JPanel(new FlowLayout());
TF = new JTextField(10);
title . add(TF);
b = new JButton(" OK ");
b . addactionlistener(this);
title . add(b);
message = new JLabel();
title.add(消息);
container.add(title,BorderLayout。北);
my list = new JList();
container.add(myList,BorderLayout。中心);
f . set visible(true);
}
/**
*展示比賽結果。
* @作者克裏斯
* @title:顯示
* @date 2011-5-24上午11:31:05
* @param n void
*/
私有空顯示(整數){
c =新的危機(n);
列表& lt列表& ltstring[]& gt;& gt結果= c . get result();
String[]str = new String[result . size()];
for(int I = 0;我& ltresult . size();i++) {
StringBuilder sb = new StringBuilder();
某人追加(“第壹個”)。追加(i+1)。append(" Day:");
列表& ltstring[]& gt;matchList = result . get(I);
for(String[] match : matchList){
某人追加(“[”)。追加(匹配[0])。追加("-")。追加(匹配[1])。追加("]");
}
str[I]= sb . tostring();
}
my list . setlistdata(str);
message . settext(" ");
f . set visible(true);
}
/**
*清除數據
* @作者克裏斯
* @title:清除
* @ date 2011-5-24AM 11:30:36 void
*/
私有void clear(){
string[]str = { " " };
my list . setlistdata(str);
message . settext(" ");
}
public void action performed(action event e){
clear();
string s = TF . gettext();
if (s == null || " "。equals(s = s . trim()){
Message.setText("請輸入壹個偶數");
}
嘗試{
int n = integer . parse int(s);
如果(n & lt= 0 || n % 2!= 0) {
Message.setText("請輸入壹個偶數");
}否則{
顯示(n);
}
} catch (Exception ex) {
Message.setText("請輸入壹個偶數");
}
f . set visible(true);
}
}
第二節課:
包com
導入Java . util . ArrayList;
導入Java . util . hashmap;
導入Java . util . linked list;
導入Java . util . list;
導入Java . util . map;
導入Java . util . random;
公共類危機{
/* *玩家人數*/
私有int n;
/* *每個運動員都沒有玩過的遊戲key:玩家姓名,value:要玩的遊戲集*/
私人地圖& lt字符串,列表& ltstring[]& gt;& gtplayerMacth
/* *玩家姓名*/
私串[]玩家;
/* *最終每日遊戲分發集合*/
個人分發名單& lt列表& ltstring[]& gt;& gt結果;
/* *所有可選比賽*/
個人分發名單& lt列表& ltstring[]& gt;& gtallMatchData[];
/* *日常遊戲*/
列表& ltstring[]& gt;dayMatch
/* *隨機對象*/
私有隨機r;
/* *當前計算的天數*/
private int nowDay
公共危機(國際)
this.n = n
playerMacth = new HashMap & lt字符串,列表& ltstring[]& gt;& gt();;
result = new ArrayList & lt列表& ltstring[]& gt;& gt();
allMatchData = new linked list[n-1];
r = new Random();
init();
go();
}
/**
*初始化播放器
* @作者克裏斯
* @title: init
* @date 2011-5-23下午04: 22: 32作廢
*/
私有void init(){
//定義玩家的名字,用數字表示,從1開始。
players =新字符串[n];
for(int I = 0;我& lt球員.長度;i++) {
//定義玩家的名字。
players[I]= string . value of(I+1);
//存儲每個玩家要玩的遊戲集合。
列表& ltstring[]& gt;matchList = new LinkedList & ltstring[]& gt;();
//玩家遊戲收藏
playerMacth.put(players[i],matchList);
//播放器組件,不變
//playerlistconst . add(players[I]);
}
//定義每個人的遊戲
for(int I = 0;我& ltplayers . length-1;i++) {
for(int j = I+1;j & lt球員.長度;j++) {
string[]match = {球員[i],球員[j]};//定義壹個競賽
//將此事件添加到相應玩家的比賽集合中。
playerMacth.get(players[i])。添加(匹配);
playerMacth.get(players[j])。添加(匹配);
}
}
}
/**
*隨機獲取當前天數內可以玩的匹配組合,並將該匹配組合從總集合中移除。
*如果當前幾天沒有比賽,先獲得比賽,然後隨機。
* @作者克裏斯
* @title: getNowDayMatch
* @date 2011-5-24上午09:48:23
* @返回列表& ltstring[]& gt;
*/
個人分發名單& ltstring[]& gt;getNowDayMatch(){
if(allMatchData[nowDay]= = null){
setAllMatchNowDay();
}
如果(!allMatchData[nowDay]。isEmpty()) {
int index = r . nextint(allMatchData[now day].size());
列表& ltstring[]& gt;list = allMatchData[nowDay]。get(索引);
allMatchData[nowDay]。移除(索引);
退貨單;
}否則{
返回null
}
}
/**
*取消前壹天的比賽。
* @作者克裏斯
* @title:取消昨天
* @ date 2065 438+01-5-24 09:56:12作廢。
*/
私人作廢取消昨天(){
//清除當前日期的可選匹配組合。
allMatchData[nowDay]= null;
//時間回復到前壹天。
now day-;
//贏得前壹天的遊戲
列表& ltstring[]& gt;matchList = result . get(now day);
//取消前壹天的比賽。
result . remove(nowDay);
//恢復每個運動員沒有參加過的比賽。
for(String[] match : matchList){
playerMacth.get(match[0])。添加(匹配);
playerMacth.get(match[1])。添加(匹配);
}
}
公共void go(){
//循環天數
for(now day = 0;現在& ltn-1;) {
//1.隨機玩遊戲
列表& ltstring[]& gt;matchList = getNowDayMatch();
//沒有競爭組合。回到前壹天取消前壹天的比賽。回到前壹天,跳過這個循環。
if (matchList == null) {
cancel yesterday();
繼續;
}
//3遍歷比賽移除選手,移除選手非比賽。
for(String[] match : matchList){
playerMacth.get(match[0])。移除(匹配);
playerMacth.get(match[1])。移除(匹配);
}
result . add(matchList);
now day++;
}
}
/**
*從玩家1開始,獲取當天所有可組合的事件。
* @作者克裏斯
* @title: setAllMatchNowDay
* @ date 2011-5-24 09:42:51早上作廢。
*/
私有void setAllMatchNowDay(){
allMatchData[nowDay] =新鏈接列表& lt列表& ltstring[]& gt;& gt();
int n = 1;//1號運動員
//這個運動員沒有參加過的比賽。
列表& ltstring[]& gt;matchList = player macth . get(string . value of(n));
for(String[] match : matchList){
列表& ltstring[]& gt;selectedList = new ArrayList & ltstring[]& gt;();
selected list . add(match);
doDetAllMatchNowDay(n+1,selected list);
}
}
/**
*今天比賽的所有組合
* @作者克裏斯
* @title: doDetAllMatchNowDay
* @ date 2011-5-24 09:46:05AM
* @param playerNum
* @param selectedList void
*/
private void doDetAllMatchNowDay(int player num,List & ltstring[]& gt;selectedList){
//運動員姓名
string player = string . value of(player num);
布爾標誌=真;
//判斷這個運動員是否入選。
for(String[]match:selected list){
if(匹配[0]。equals(player) || match[1]。等於(玩家)){
flag = false
打破;
}
}
//已被選中。
if ( flag == false) {
//最後壹個人
if (playerNum == n) {
allMatchData[nowDay]。add(selected list);
}否則{
doDetAllMatchNowDay(player num+1,selected list);
}
返回;
}
//這個運動員沒有參加過的比賽。
列表& ltstring[]& gt;matchList = player macth . get(player);
//這個運動員可以選擇的比賽。
列表& ltstring[]& gt;canDoList = new ArrayList & ltstring[]& gt;();
for(String[] match : matchList){
flag = true
for(String[]selected:selected list){
if(匹配[0]。等於(玩家)){
if(匹配[1]。等於(選定的[0])){
flag = false
}else if(match[1]。等於(selected[1]){
flag = false
}
}否則{
if(匹配[0]。等於(選定的[0])){
flag = false
}else if(匹配[0]。等於(selected[1]){
flag = false
}
}
}
如果(標誌){
can dolist . add(match);
}
}
//遍歷這個運動員可以選擇的遊戲。
for(String[] match : canDoList){
列表& ltstring[]& gt;new list = copyArrayList(selected list);
//錄制當前遊戲
new list . add(match);
//最後壹個人
if (playerNum == n) {
allMatchData[nowDay]。add(new list);
}否則{
doDetAllMatchNowDay(player num+1,new list);
}
}
}
/**
*復制收藏
* @作者克裏斯
* @title: copyArrayList
* @ date 2011-5-24 09:24:44am
* @param list
* @返回列表& ltstring[]& gt;
*/
個人分發名單& ltstring[]& gt;copy ArrayList(List & lt;string[]& gt;列表){
列表& ltstring[]& gt;newList = new ArrayList & ltstring[]& gt;();
for(String[] s : list){
newList.add
}
返回newList
}
公共列表& lt列表& ltstring[]& gt;& gtgetResult() {
返回結果;
}
}