📄 consolation1.lua
字号:
--[[
文件名:consolation.lua
功能描述:该文件通过函数consolation()实现落选赛编排功能。
文件中使用的参数members、nos、num都是从Java中传入,为全局变量。
members为参赛成员ArrayList,nos为编排后的对阵ArrayList,
num表示从小组排名第几的成员开始参加落选赛。
编排后数据格式类似于:
nos[0][0]="member12" nos[1][0]="member12" nos[2][0]="member11"
nos[0][1]="member11" nos[1][1]="member10" nos[2][1]="member10"
nos[3][0]="member13" nos[4][0]="member13" nos[5][0]="member14"
nos[3][1]="member14" nos[4][1]="member15" nos[5][1]="member15"
nos[6][0]="member18" nos[7][0]="member18" nos[8][0]="member17"
nos[6][1]="member17" nos[7][1]="member16" nos[8][1]="member16"
nos[9][0]="member19" nos[10][0]="member19" nos[11][0]="member19"
nos[9][1]="member20" nos[10][1]="member23" nos[11][1]="member21"
nos[12][0]="member19" nos[13][0]="member20" nos[14][0]="member20"
nos[12][1]="member22" nos[13][1]="member21" nos[14][1]="member22"
nos[15][0]="member23" nos[16][0]="member23"
nos[15][1]="member21" nos[16][1]="member22"
参数列表:consolation()函数包含三个参数members、nos、num。
参数类型:members是Java中的ArrayList类型,在Lua中是userdata类型;
nos是Java中的ArrayList类型,在Lua中是userdata类型;
num是Java中的int类型,在Lua中是Number类型。
返回值:文件返回三个值list、nos、num
返回值类型:members是Java中的ArrayList类型,在Lua中是userdata类型;
nos是Java中的ArrayList类型,在Lua中是userdata类型;
num是Java中的int类型,在Lua中是Number类型。
返回值说明:members为参赛成员ArrayList,nos为编排后的对阵ArrayList,
num表示从小组排名第几的成员开始参加落选赛。
2007年6月22日 程峰
]]--
----------------------------------------------------------------------
-- 函数circle()的定义,实现单循环对阵编排
-- 参数members为参赛成员ArrayList,nos为编排后的对阵ArrayList,
-- memberNum为参加编排的成员数。
function circle( member, nos, memberNum )
-- 对阵编排
for i=0, memberNum-2 do
for m=i+1, memberNum-1 do
l = luajava.newInstance("java.util.ArrayList")
-- 成员i与成员m对阵
l:add(member:get(i))
l:add(member:get(m))
nos:add(l)
end
end -- end for
end
-----------------------------------------------------------------------
------------------------------------------------------------------------
-- 函数consolation()的定义,实现落选赛对阵编排
-- 参数members为参赛成员ArrayList,nos为编排后对阵的ArrayList
-- num表示从小组排名第几的成员开始参加落选赛。
function consolation( members, nos, num )
memberNum=members:size() -- 记录小组数
number={} -- 记录各个小组成员数
same=true
for i=0, memberNum-1 do
-- number[i]记录第i个小组的成员数
number[i]=(members:get(i)):size()
-- 判断各个小组数是否相同
if number[i]~=number[0] then
same=false
end
end
-- 每个小组的成员数相同
if same then
-- 按列循环
for j=num-1, number[0]-1 do
member=luajava.newInstance("java.util.ArrayList")
-- 生成每列的数组member
for i=0, memberNum-1 do
member:add((members:get(i)):get(j))
end
circle(member, nos, memberNum) -- 为每列生成单循环对阵编排
end
-- 每个小组的成员数不同
else
min=0 -- 成员数最少的小组
minNum=number[0] -- 成员数最少的小组所包含的成员数
for i=0, memberNum-1 do
if number[i]<minNum then
min=i
minNum=number[i]
end
end
minNum=minNum-1
-- 前若干列的单循环对阵编排
for j=num-1, minNum-1 do
member=luajava.newInstance("java.util.ArrayList")
for i=0, memberNum-1 do
member:add((members:get(i)):get(j))
end
circle(member, nos, memberNum)
end
-- 最后两列的单循环对阵编排
-- 其中在小组赛对阵过的成员不再比赛
-- 从第一小组开始遍历
for i=0, memberNum-2 do
for j=minNum, number[i]-1 do
-- 从第二小组开始遍历
-- 生成对阵关系
for p=i+1, memberNum-1 do
for q=minNum,number[p]-1 do
member=luajava.newInstance("java.util.ArrayList")
member:add((members:get(i)):get(j))
member:add((members:get(p)):get(q))
nos:add(member)
end
end
end
end -- end for
end -- end if
end -- end method consolation
-------------------------------------------------------------------------------
--判断全局变量members是否正常传入
if members==nil then
print("Error. members object is nil")
return
end
--判断全局变量nos是否正常传入
if nos==nil then
print("Error. nos object is nil")
return
end
--判断全局变量num是否正常传入
if num==nil then
print("Error. num object is nil")
return
end
consolation( members, nos, num )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -