求助:循环赛—java源代码

求助:循环赛—java源代码,第1张

以前的!

====代码====

package com

import java.awt.BorderLayout

import java.awt.FlowLayout

import java.awt.event.ActionEvent

import java.awt.event.ActionListener

import java.util.List

import javax.swing.JButton

import javax.swing.JFrame

import javax.swing.JLabel

import javax.swing.JList

import javax.swing.JPanel

import javax.swing.JTextField

/**

* 网球赛

* @author Cris

* @ClassName: Match

* @Version

* @ModifiedBy

* @Copyright @ 2010 H&L Technology Inc.

* @date 2011-5-24 上午11:29:39

* @description

*/

public class Match implements ActionListener{

private JFrame f

private JTextField tf

private JPanel container

private JList myList

private JLabel message

private JButton b

/**

* @author Cris

* @title: main

* @date 2011-5-23 上午11:07:27

* @param args void

*/

public static void main(String[] args) {

Match t = new Match()

t.go()

}

public void go(){

f = new JFrame("比赛")

f.setLocation(100, 200)

f.setSize(600,500)

container = new JPanel(new BorderLayout())

f.setContentPane(container)

JPanel title = new JPanel(new FlowLayout())

tf = new JTextField(10)

title.add(tf)

b = new JButton("确定")

b.addActionListener(this)

title.add(b)

message = new JLabel()

title.add(message)

container.add(title,BorderLayout.NORTH)

myList = new JList()

container.add(myList,BorderLayout.CENTER)

f.setVisible(true)

}

/**

* 显示比赛结果

* @author Cris

* @title: show

* @date 2011-5-24 上午11:31:05

* @param n void

*/

private void show(int n){

Cris c = new Cris(n)

List<List<String[]>>result = c.getResult()

String[] str = new String[result.size()]

for (int i = 0i <result.size()i++) {

StringBuilder sb = new StringBuilder()

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

List<String[]>matchList = 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)

}

/**

* 清空数据

* @author Cris

* @title: clear

* @date 2011-5-24 上午11:30:36 void

*/

private void clear(){

String[] str = {""}

myList.setListData(str)

message.setText("")

}

public void actionPerformed(ActionEvent e) {

clear()

String s = tf.getText()

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

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

}

try {

int n = Integer.parseInt(s)

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

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

}else{

show(n)

}

} catch (Exception ex) {

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

}

f.setVisible(true)

}

}

第二个类:

package com

import java.util.ArrayList

import java.util.HashMap

import java.util.LinkedList

import java.util.List

import java.util.Map

import java.util.Random

public class Cris {

/**选手数量*/

private int n

/**各个运动员还没进行的比赛 key:球员名称,value:需进行的比赛集合*/

private Map<String, List<String[]>>playerMacth

/**球员人名*/

private String[] players

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

private List<List<String[]>>result

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

private List<List<String[]>>allMatchData[]

/**每天的比赛*/

List<String[]>dayMatch

/**一个随机对象*/

private Random r

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

private int nowDay

public Cris(int n){

this.n = n

playerMacth = new HashMap<String, List<String[]>>()

result = new ArrayList<List<String[]>>()

allMatchData = new LinkedList[n-1]

r = new Random()

init()

go()

}

/**

* 初始化球员

* @author Cris

* @title: init

* @date 2011-5-23 下午04:22:32 void

*/

private void init(){

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

players = new String[n]

for (int i = 0i <players.lengthi++) {

//定义球员的名字

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

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

List<String[]>matchList = new LinkedList<String[]>()

//球员赛事集合

playerMacth.put(players[i], matchList)

//球员集合,不变

// playerListConst.add(players[i])

}

//定义每个人的比赛

for (int i = 0i <players.length -1i++) {

for (int j = i+1j <players.length j++) {

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

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

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

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

}

}

}

/**

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

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

* @author Cris

* @title: getNowDayMatch

* @date 2011-5-24 上午09:48:23

* @return List<String[]>

*/

private List<String[]>getNowDayMatch(){

if (allMatchData[nowDay] == null) {

setAllMatchNowDay()

}

if (! allMatchData[nowDay].isEmpty()) {

int index = r.nextInt(allMatchData[nowDay].size())

List<String[]>list = allMatchData[nowDay].get(index)

allMatchData[nowDay].remove(index)

return list

}else {

return null

}

}

/**

* 取消前一天的比赛

* @author Cris

* @title: cancelYesterday

* @date 2011-5-24 上午09:56:12 void

*/

private void cancelYesterday(){

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

allMatchData[nowDay] = null

//时间恢复到前一天

nowDay--

//获得前一天的比赛

List<String[]>matchList = result.get(nowDay)

//取消前一天的比赛

result.remove(nowDay)

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

for(String[] match : matchList){

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

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

}

}

public void go(){

//循环比赛天数

for ( nowDay = 0nowDay <n -1) {

//1.随机一个比赛

List<String[]>matchList = 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号队员开始,获得当前天数所有可组合的赛事

* @author Cris

* @title: setAllMatchNowDay

* @date 2011-5-24 上午09:42:51 void

*/

private void setAllMatchNowDay(){

allMatchData[nowDay] = new LinkedList<List<String[]>>()

int n = 1//1号运动员

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

List<String[]>matchList = playerMacth.get(String.valueOf(n))

for(String[] match : matchList){

List<String[]>selectedList = new ArrayList<String[]>()

selectedList.add(match)

doDetAllMatchNowDay(n+1, selectedList)

}

}

/**

* 今天比赛的所有组合

* @author Cris

* @title: doDetAllMatchNowDay

* @date 2011-5-24 上午09:46:05

* @param playerNum

* @param selectedList void

*/

private void doDetAllMatchNowDay(int playerNum,List<String[]>selectedList){

//运动员名称

String player = String.valueOf(playerNum)

boolean flag = 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

}

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

List<String[]>matchList = playerMacth.get(player)

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

List<String[]>canDoList = new ArrayList<String[]>()

for(String[] match : matchList){

flag = true

for(String[] selected : selectedList){

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

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

flag = false

}else if(match[1].equals(selected[1])){

flag = false

}

}else{

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

flag = false

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

flag = false

}

}

}

if (flag) {

canDoList.add(match)

}

}

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

for(String[] match : canDoList){

List<String[]>newList = copyArrayList(selectedList)

//记录当前比赛

newList.add(match)

//最后一个人员

if (playerNum == n) {

allMatchData[nowDay].add(newList)

}else{

doDetAllMatchNowDay(playerNum+1, newList)

}

}

}

/**

* 复制集合

* @author Cris

* @title: copyArrayList

* @date 2011-5-24 上午09:24:44

* @param list

* @return List<String[]>

*/

private List<String[]>copyArrayList(List<String[]>list){

List<String[]>newList = new ArrayList<String[]>()

for(String[] s : list){

newList.add(s)

}

return newList

}

public List<List<String[]>>getResult() {

return result

}

}

要搞清网球记分,先要明白网球的记分的几个层次:从小到大为分(point),局(game),盘(set),比赛(match)。这有点像十进制满10进1的意思:

满4分则得1局,满6局则得1盘,满2盘或3盘则赢得一场比赛。(但有净胜规则)具体来说:

一、分:第一分记15,得第二份记为30,得第三分记为40,(15,30,40无数值大小之分,可以看做1、2、3分的符号)得第四分,就直接赢的一局了。但此时有净胜2分规则。即一方得4分时,另一方最多只能拿到2分(30)。如果一方得4分时,另一方得了3分(40),则暂记为4分方领先(但不再用分数表示了),如果领先方紧接着再拿一分(此时比对方多2分),则拿下这局。如果再次厅芹数平分,则比分记为40-40,此时叫做duce。简单来说,赢首顷得一局的方法是在比多方多出至少2分的情况下,拿到4分或4分以上。

二、局:每局由1人发球,一局结束,下一局换发球方。先拿到6局的人就拿下一盘。但此时仍有要净胜2局的规则。即一方赢得6局的时候,另一方至多只能赢得4局。如果是6-5,则要继续,如果7-5,则赢得一盘。如果战成6-6,大多数比赛,都会进行抢七。抢七就是一个大局,你可以理解为不是4分而是7分的一局,也就是先拿7分的人赢得这局,此时同样存在净胜2分的规定。抢七时,先由1方发1次球,之后双方轮流发2个。最后局分会是7-6。7的人赢得一盘。

三、盘:女子比赛永远是3盘2胜,3盘中赢得2盘者赢得比赛。男子一般为3盘2胜,扮首大满贯时为5盘3胜。此时不存在净胜2盘的规则。但强调的是大满贯的决胜盘,即女子比赛盘分打成1-1后的第三盘,男子比赛盘分打成2-2后的第5盘,当局分为6-6时,不再进行抢七,而是继续按照之前的规则,轮换发球局,直到出现一方净胜2局。也就是说大满贯的决胜盘的比分可能是8-6或者16-14这种,超过7的。(抢七的话局分顶多是7)

大概就是这样,比较复杂哈,但愿我写的你能明白~

基本规则

(一)发球

1.发球前的规定

发球员在发球前应先站在端线后、中点和边线的假定延长线之间的区域里,用手将球向空中任何方向抛起,在球接触地面以前,用球拍击 球(仅能用一只手的运动员,可用球拍将球抛起)。球拍与球接触时,就算完成球的发送。

2.发球时的规定

发球员在整个发球动作中,不得通过行走或跑动改变原站的位置,两脚只准站在规定位置,不得触及其他区域。

3.发球员的位置

(1)每局开始,先从右区端线后发球,得或失一分后,应换到左区发球。

(2)发出的球应从网上越过,落到对角的对方发球区内,或其周围的线上

4.发球失误

未击中球;发出的球,在落地前触及固定物(球网、中心带和网边白布除外);违反发球站位规定。 发球员第一次发球失误后,应在原发位置上进行第二次发球。

5.发球无效

发球触网后,仍然落到对方发球区内,接球员未作好接球准备;均应重发球。

6.交换发球

第一局比赛终了,接球员成为发球员,发球成为接球。以后每局终了。均依次互相交换,直至比赛结束。

(二)通则

1.交换场地

双方应在每盘的第1、3、5等单数局结束后,以及每盘结束双方局数之和为单数时,交换场地。

2.失分

发生下列任何一种情况,均判失分。

(1)在球第二次着地前,未能还击过网。

(2)还击的球触及对方场区界线以外的地面、固定物或其他物件。

(3)还击空中球失败。

(4)故意用球拍触球超过一次。

(5)运动员的身体、球拍,在发球期间触及球网。

(6)过网击球。

(7)抛拍击球

3.压线球

落在线上的球都算界内球。

(三)双打

1.双打发球次序

每盘第一局开始时,由发球方决定由何人首先发球,对方则同样地在第2局开始时,决定由何人首先发球。 第3局由第1局发球方的另一球 员发球。第4局由第2局发球主的另一球员发球。以下各局均按此序秩发球。

2.双打接球次序

先接球的一李团方,应在第1局开始时,决定何人先接发球,并在这盘 单数局,继续先接发球。双方同样应在第2局开始时,决定何人接发球,并在这盘双数局继续先接发球。他们的同伴应在每局中轮流接发球。

3.双打还击

接发球后,双方应轮流由其中任何一名队员还击。如运动员在其同队队员击球后,再以球拍触球,则判对方得分。

(四)计分方法

1.一局

(1)每胜1球得1分,先胜4分者胜1局。

(2)双方各得3分时为“平分”,平分后,净胜两分为胜1局。

2.一盘

(1)一方先胜6局为胜1盘。

(2)双方各胜5局时,一方空扰段净胜两局为胜1盘

3.决胜局计分制

在每盘的局数为6平时,有以下两种计分制。

(1)长盘斗誉制:一方净胜两局为胜1盘。

(2)短盘制(抢七):决胜盘除外,除非赛前另有规定,一般应按以下办法执行。

A.先得7分者为胜该局及该盘(若分数为6平时,一方须净两分)。

B.首先发球员发第1分球,对方发第2、3分球,然后轮流发两分球,直到比赛 结束。

C.第1分球在右区发,第2分球在左区发,第3分球在右区发。

D.每6分球和决胜局结束都要交换场地。

4.短盘制的计分

(1)第1个球(0:0),发球员A发1分球,1分球之后换发球。

(2)第2、3个球(报1:0或0:1,不报15:0或0:15),由B发球,B连发两分球后换发球,先从左区发球。

(3)第4、5个球(报3:0或1:2,2:1,不报40:0或15:30, 30:15),由A发球,A连发两球后换发球后换发球,先从左区发球。

(4)第6、7个球(报3:3或2:4,4:2或1:5,5:1或6:0,0: 6) ,由B发1分球之后交换场地,若比赛未结束,B继续发第7个球。

(5)比分打到5:5,6:6,7:7,8:8……时,需连胜两分才能决定谁为胜方。但在记分表上则统一写为7:6。

(6)决胜局打完之后,以方队员交换场地。

5.赛制

实行淘汰赛。一场比赛中,男子比赛除大满贯赛事和部分大师系列赛决赛采用五盘三胜制以外,均使用三盘两胜制。女子比赛全部采用三盘两胜制。

(五)场地规则

1.球场

球场应为长78英尺(23.77米)宽27英尺(8.23米)的矩形。中间由一条挂在最大直径为1/3英寸(0.8厘米)粗的绳索或钢丝绳上的球网分开。

2.球网

球网粗绳索或钢丝绳最大直径为1/3英寸(0.8厘米),网的两端应附着或挂在两个网柱顶端,网柱应为边长不超过6英寸(15厘米)的正方形方柱或直径为6英寸(15厘米)的圆柱。网柱不能超过网绳顶端1英寸(2.5厘米)。每测网柱的中点应距场地3英尺(0.914米),网柱的高度应使网绳或钢丝绳顶端距地面的垂直距离为3英尺6英寸(1.07米)。在单双打两用场地上悬挂双打球网的进行单打比赛时,球网应该由两根高度为3英尺6英寸(1.07米)的“单打支杆”支撑,该支杆截面应是边长小于3英寸(7.5厘米)的正方形方柱或直径小于3英寸(7.5厘米)的圆柱。每侧单打支杆的中点应距单打边线3英尺(0.914米)。球网需要充分拉开,以便能够有效填补两根支柱之间的空间,并有效打开所有网孔,网孔大小以能防止球从球网中间穿过。球网中点的高度应该是3英尺(0.914米),并且用不超过2英寸(5厘米)宽的完全是白色的网带向下绷紧固定。球网上端的网绳或钢丝绳要用一条白色的网带包裹住,每一面的宽度介于2英寸(5厘米)到2.5英寸(6.35厘米)。在球网、网带及单打支杆上都不能有广告。

3.球场线

球场两端的界线叫底线,两边的界线叫边线。在距离球网两侧21英尺(6.4米)的地方各画一条与球网平行的线,为发球线。球网与每一边的发球线和边线组成的场地再被发球中线分为两个相等的区域,为发球区,发球中线是一条连接两条发球线中点并与边线平行的线,线宽须为2英寸(5厘米)。每一条底线都被一条长4英寸(10厘米)、宽2英寸(5厘米)的发球中线的假定延长线分为相等的两个部分,由一条短线分隔,该短线为“中点”,它与所处的底线呈直角相连,自底线向场内画。除了底线的最大宽度可以不超过4英寸(10厘米)以外,所有其他线的宽度均应在1英寸(2厘米)到2英寸(5厘米)之间。所有的测量都应以线的外沿为准。

4.永久固定物

网球场地上的永久固定物不只包括球网、网柱、单打支杆、网绳、钢丝绳、中心带及网带,以下情况也算永久固定物,如球场四侧的挡板、看台、环绕球场固定或可移动的椅子、以及观众,以及所有场地周围和上方的配套设施,还有出于各自预定位置的裁判、司网裁判、脚误裁判、司线员和球童。(ITF说明:为使本规则充分执行,“裁判员”的含义为,坐在球场裁判席的裁判,以及所有在比赛中协助裁判执法的工作人员)

如果广告位于球场后侧司线的椅子后面,则广告中不能包括白色或黄色。浅色只有在不干扰球员视线的情况下才允许使用。(ITF说明1:在戴维斯杯、联合会杯和国际网联主办的巡回赛中,对于底线后侧和边线两侧区域大小的具体要求分别包括在各项赛事的相关条款中。 ITF说明2:对于俱乐部和业余选手,底线后侧场地距离至少为18英尺(5.5米),边线侧面距离至少10英尺(3.05米))

(六)比赛设备规则

1.球

场上用球外部需要由纺织材料统一包裹,颜色为白色或黄色,接缝处需无缝线痕迹。用球的尺寸需要符合附录一第四条中的要求(球的检测在规则三中有具体说明),重量要介于2盎司(56.7克)和2又1/6盎司(58.5克)之间。在从100英寸(254厘米)的高度向混凝土地面作自由落体运动时,反d的高度应该介于53英寸(134.62厘米)和58英寸(147.32厘米)之间。当在球上施加18磅(8.165公斤)的压力时,向内发生d性形变应该介于0.22英寸(0.559厘米)和0.29英寸(0.737厘米)之间,压缩后反d形变的范围应该介于0.315英寸(0.8厘米)和0.425英寸(1.08厘米)之间。这两种形变数据应该是以球的三个轴测试后得到的平均值。在每一种情况下任何两个数据之间的差异不能大于0.03英寸(0.076厘米)。

如果在海拔4000英尺(1219米)的高度进行比赛,就需要采用另外两种特殊用球。第一种是除d跳高度要介于48英寸(121.92厘米)和53英寸(134.62厘米)以外,还要使球的内压大于外部气压,其他方面则与上面的描述完全相同,这种球通常被称为增压球;第二种球除d跳高度要在53英寸(134.62厘米)和58英寸(147.32厘米)之间外,还要使球的内压大约等于外部的气压,并且能在指定的比赛场地的海拔高度保持60天以上,其他方面则与上面的描述完全相同,这种球通常被称为零压球或无压球。

所有关于球d跳、尺寸和形变的测试,都需要符合附录一规定。

国际网球联合会将对任何关于某种球或样品是否符合上述标准,或是否可以被批准用于比赛的问题进行裁决。这种裁决有可能是国际网联本身主动进行的行为,也可以依据所有真正感兴趣的人或包括任何选手、器材生产厂商或国家网球协会,以及她们的会员的申请来进行。这类申请与裁决应该按照国际网联的审查与听证程序来进行。

(ITF说明:所有按照本网球规则进行的比赛中所使用的网球,必须列在由国际网联颁布的ITF官方批准用球的名单上。)

2.球拍

不符合下列要求的球拍不允许在按照本规则进行的比赛中被使用:

a. 球拍的击球面应该是平坦的,由连接在球拍框上的拍弦组成统一规则,拍弦在交叉的地方应该是相互交织或相互结合的;拍弦所组成的试样应该大体一致,中央的密度特别不能小于其它区域的密度。球拍的设计和穿弦应使球拍正反两侧在击球时性质大体保持一致。

拍线上不应有附属物或突出物,除非该附属物仅仅并且非常明确的是用来限制和防止拍弦磨损、撕拉或振动的,而且它的尺寸以及位置也必须是合理的。

b.从1997年1月1日起,在职业比赛中使用的球拍拍框的总长度(包括拍柄)不能超过27英寸(73.66厘米)。从2000年1月1日起,在非职业比赛中使用的球拍拍框的总长度(包括拍柄)不能超过27英寸(73.66厘米)。在此之前,非职业比赛送使用的球拍的最大长度为32英寸(81.28厘米)。拍框的总宽度不能超过12又1/2英寸(31.75厘米)。穿弦平面的总长度不能超过15又1/2英寸(39.37厘米),总宽度不能超过11又1/2英寸(29.21厘米)。

c.拍框、包括拍柄都不能有附属物和装置,除非该附属物仅仅并且非常明确的是用来限制和防止球拍磨损、破裂、振动或是用来调整重量分布的,而且它的尺寸以及位置也必须是合理的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12411572.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存