sub lotta(obj as object, e as eventargs)
dim lag(4)
lag(0) = "Tibro IK"
lag(1) ="Skövde IK"
lag(2) = "Mariestad Bois"
lag(3) ="Skara IK"
dim i as integer
Dim r As New Random()
dim match(15,2)
dim match1(15)
for i = 0 to 11
match(i,1)=lag(r.Next(0, 4))
match(i,2)=lag(r.Next(0, 4))
match1(i) = match(i,1)&"-"&match(i,2)
response.write(match1(i)&"<br />")
next
end sub
Nu lottas två lag mot varandra. Problemet är att match(i,1) kan bli samma som match(i,2).
Hur ska jag göra så att lagen inte kan möta sig själva
sub lotta()
dim lag(4)
lag(0) = "Tibro IK"
lag(1) ="Skövde IK"
lag(2) = "Mariestad Bois"
lag(3) ="Skara IK"
dim i as integer
Dim r As New Random()
dim match(15,2)
dim match1(15)
for i = 0 to 15
Dim intHome As Integer = -1
Dim intVisitor As Integer = -1
Dim bolEqual As Boolean = True
Do While bolEqual
intHome = r.Next(0,4)
intVisitor = r.Next(0,4)
If intHome <> intVisitor Then
bolEqual = False
End If
Loop
match(i,1)=lag(intHome)
match(i,2)=lag(intVisitor)
match1(i) = match(i,1)&"-"&match(i,2)
response.write(match1(i)&"<br />")
next i
end sub
Den funkar så att inget lag får spela mot sig själv. Men! med denna typ av slumpning så kan ett lag få spela 10 matcher, ett annat lag 1 match osv .... dvs, de kommer inte att få spela lika många ggr.
Nu har jag kommit lite längre. Nu kan lagen bara möta varandra en gång. Hur gör man för att räkna så att alla lag får spela samma antal matcher
jag har den här koden
sub lotta(obj as object, e as eventargs)
dim lag(6)
lag(0) = "Tibro IK"
lag(1) = "Skövde IK"
lag(2) = "Mariestad Bois"
lag(3) = "Skara IK"
lag(4) = "Leksands IF"
lag(5) = "Hammarby IF"
dim i as integer
Dim r As New Random()
dim antal_matcher as integer = 15
dim match(antal_matcher,2)
dim match1(antal_matcher)
dim matcher_per_lag = 5
for i = 1 to antal_matcher
Dim intHome As Integer = -1
Dim intVisitor As Integer = -1
Dim bolEqual As Boolean = True
Do While bolEqual
intHome = r.Next(0,5)
intVisitor = r.Next(0,6)
If intHome <> intVisitor Then
bolEqual = False
End If
Loop
dim m as string = lag(intHome) &"-"& lag(intVisitor)
dim m1 as string = lag(intVisitor) &"-"& lag(intHome)
dim j as integer
dim k as integer
for k = 0 to i
dim found as boolean = false
for j = 0 to ubound(match1)
if m = match1(j) or m1 = match1(j) then
found = true
exit for
end if
next
if not found then
match(i,1)=lag(intHome)
match(i,2)=lag(intVisitor)
match1(i) = match(i,1)&"-"&match(i,2)
response.write(i &" "& match1(i) & "<br />")
end if
next
next i
Jag försöker kolla så att inte något av de nya lagen finns i de tidigare positionerna av arrayen men får det inte att fungera.
if i = 2 then
if match(i-1,1) = lag(intHome) or match(i-1,2) = lag(intVisitor) or match(i,1) = lag(intHome) or match(i,2) = lag(intVisitor) then
else
match1(i) = lag(intHome) &"-"& lag(intVisitor)
end if
elseIf i >= 3 Then
if match(i-1,1) = lag(intHome) or match(i-1,2) = lag(intVisitor) or match(i-2,1) = lag(intHome) or match(i-2,2) = lag(intVisitor) or match(i-3,1) = lag(intHome) or match(i-3,2) = lag(intVisitor) or match(i,1) = lag(intHome) or match(i,2) = lag(intVisitor) then
else
match1(i) = lag(intHome) &"-"& lag(intVisitor)
end if
else
match1(i) = lag(intHome) &"-"& lag(intVisitor)
end if
En annan fråga.
kan man på något sätt slumpa en ny match om den slumpade redan finns i arrayen. Om två matcher är lika nu skapas det inte rätt antal matcher
Förstår du bara vad jag menar med pseudokoden så klarar du nog att implementera det själv.
Jag menar alltså att du ska separera på matchskapningen och lottningen i vilken de spelas, istället för att försöka kombinera dessa två.
Alltså:
1. Strukturerat generera alla matcher som ska spelas och spara undan dessa. Vi vet då att alla matcher kommer med (varken mer eller mindre) och att ingen möter sig själv.
2. Lotta i vilken ordning matcherna ska spelas (t.ex. genom att ett flertal gånger slumpvis dra två matcher från din mängd och byta plats på dem).
nu har jag fixat så att alla matcher skapas.
Sen försöker jag slumpa fram ett spelschema. Hur ska jag göra för att kontrollera om matchen redan finns och i så fall slumpa fram en ny?
kod för slumpningen
dim l as integer
dim antal as integer = ubound(match)+1
dim match1(antal)
dim r as new random()
for l = 1 to antal
match1(l) = match(r.Next(0,antal))
response.write(l &" "& match1(l) &"<br />")
next
Jag kodar normalt inte VB, så med reservation för fel:
dim l as integer
dim antal as integer = ubound(match)+1
dim match1(antal)
dim r as new random()
dim slumptal1 as integer
dim slumptal2 as integer
dim tempmatch as match // vet inte hur du definierat match...?
for l = 1 to antal*3 // ett tillräckligt stort tal
slumptal1=r.Next(0,antal)
slumptal2=r.Next(0,antal)
tempmatch=match(slumptal1) // spara undan matchen temporärt
match(slumptal1)=match(slumptal2); // byt plats på matcherna
match(slumptal2)=tempmatch;
next
Nu innehåller arrayen match en slumpvis utvald matchordning.
Nej. Den byter plats på två slumpvis utvalda matcher över 50 ggr. Jag tog siffran ur luften, därför att den (intuititvt, utan att räkna på det) troligtvis låter varje match byta plats åtminstone en gång.
Det är alltså inte fråga om att slumpa fram matcherna nu. Alla matcher som ska spelas finns ju redan. Det gäller bara att sortera dem slumpvis.
jo jag är med. Jag försökte slumpa fram ordningen på ett annat sätt.
dim l as integer
dim antal as integer = ubound(match)+1
dim match1(antal)
dim r as new random()
dim tempmatch as string
for l = 1 to 21
tempmatch = match(r.Next(0,antal))
dim n as integer
for n = 1 to ubound(match1)
if match1(n) = tempmatch then
här vill jag att den ska hoppa tillbaka till slumpningen
else
match1(l) = tempmatch
end if
next
response.write(match1(l) &"<br />")
next
Det fungerar. Den lägger inte till matchen i match1 om den redan finns där.
Men hur gör jag för att hoppa tillbaka till slumpningen om den finns där.
det jag ögr med min kod är att koll om matchen redan finns i arrayen match1 där jag lagrar den slumpade spelordningen.
Det jag skulle vilja är att hoppa tillbaka ett steg i den första for-satsen och på så sätt slumpa fram en ny match men det verkar inte fungera
provade med att göra så här
dim n as integer
for n = 1 to ubound(match1)
if match1(n) = tempmatch then
l=l-1
else
match1(l) = tempmatch
end if
next
Alla matcher är skapade korrekt och jag vet att det ska vara 21 matcher (det är 7 lag) provade din kod så här
dim l as integer
dim antal as integer = ubound(match)+1
dim match1(antal)
dim r as new random()
dim slumptal1 as integer
dim slumptal2 as integer
dim tempmatch as string
for l = 1 to antal
slumptal1=r.Next(0,antal)
slumptal2=r.Next(0,antal)
tempmatch=match(slumptal1)
match(slumptal1)=match(slumptal2)
match(slumptal2)=tempmatch
response.write(tempmatch &"<br />")
next
Varför skriver du ut tempmatch? Det är ju fel. Loopa igenom match från 1 till 21 och skriv ut alla matcher istället.
Sen har du ändrat loopen. Den är inte som den jag skrev. Du slumpar för få gånger (antal istället för antal*3).
Så här menar jag:
for l = 1 to antal*3 // ett tillräckligt stort tal
slumptal1=r.Next(0,antal)
slumptal2=r.Next(0,antal)
tempmatch=match(slumptal1) // spara undan matchen temporärt
match(slumptal1)=match(slumptal2); // byt plats på matcherna
match(slumptal2)=tempmatch;
next
for l=1 to antal
response.write(match(l) &"<br />")
next
278 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25