finns det något sätt att avbryta loopningen av en if sats? Sorry. Jag uttrycker mig fel. Jag vill alltså avbryta exekveringen av en villkorssats och misstänker att jag blandar ihop c++, vb och vbscript eftersom jag har för mig att jag sett något liknande. Jag har ett svagt minne av "break" eller "End" men det stämmer säkert inte. Misstänker att någon kan bekräfta detta. Här är ett exempel jag bråkar med just nu. If villkorsatsen som testar med Problemet är att du vid kontrollen ersätter gamla värden med det nya slumptalet om slumptalet inte existerar: Precis, det är det vi använder oss av. Hej Christian.if sats
En for sats kan man ju avbryta med End For men finns det något liknande för if satser?Sv:if sats
Sv:if sats
(If DIClista(j) = randomnumber then) är den som rullas igenom fler gånger än den skall.
Den bryter inte när den fått False som vilkor och listan i dictionaryt får också dubletter då.
<%
Dim randomnumber
Dim DIClista
Set DIClista = CreateObject("Scripting.Dictionary")
Randomize
AntalImages = 20
MaxAntal = 20
for i=1 to AntalImages 'räkna så att vi får alla nummer i MaxAntal
'ta fram ett slump nummer
randomnumber = Int( Rnd * Maxantal ) + 1
'Här är kontrollen som inte funkar...
For j=0 to DIClista.Count
If DIClista(j) = randomnumber then
exit for
i = i - 1
Else
DIClista(i) = randomnumber
End If
Next
'testutskrift
response.write i & ", "
response.write DIClista(i) %> <br> <%
Next
%> Sv: if sats
Else
DIClista(i) = randomnumber
End If
Detta skall funka, har ej testat det då jag ej har tillgång till IIS.
Sedan är detta inte en bra lösning på problemet. Om du har REJÄLT med otur kan du fastna i oändlighet. :)
<%
Dim randomnumber
Dim DIClista
Set DIClista = CreateObject("Scripting.Dictionary")
Randomize
AntalImages = 20
MaxAntal = 20
for i=1 to AntalImages 'räkna så att vi får alla nummer i MaxAntal
'ta fram ett slump nummer
Dim cont
cont = true
do while cont
randomnumber = Int( Rnd * Maxantal ) + 1
'Kontrollera om slumptal redan existerar...
Dim found
found = false
For j=0 to DIClista.Count
If DIClista(j) = randomnumber then
found = true
exit for
End If
Next
' Lägg till slumptal om det ej existerade, annars leta efter ett nytt.
if not found then
DIClista(i) = randomnumber
cont = false
end if
loop
'testutskrift
response.write i & ", "
response.write DIClista(i) %> <br> <%
Next
%>
/ Peter
Sv:if sats
Visst hade vi kunnat lägga "Exit Do" istället för "Do While".Sv: if sats
Så bra att den funkade :)
Har skrivit ihop en bättre lösning om du vill ha, som är <b>MYCKET</b> snabbare (när du skall ha MÅNGA unika slumptal, dock så kräver den mer minne juh fler unika tal det gäller att söka bland).
' minRange - lowest value
' maxRange - highest value
' numbers - number of values (has to be <= than maxRange-minRange+1)
Function GetUniqueIntList(minRange, maxRange, numbers)
' Declaration of variables.
Dim srcList(), uniqueList()
Dim rndNb, size
' Calculate size of source-list.
size = maxRange-minRange+1
' Redimension source- and unique-list.
ReDim srcList(size)
ReDim uniqueList(numbers)
' Create source list
' {minRange, minRange+1, minRage+2, ..., maxRange}
For i=0 To size-1
srcList(i) = i + minRange
Next
Randomize
' Create random list.
For i=0 To numbers
' Get random value from source list.
rndNb = Int(Rnd * size)
' Save random value.
uniqueList(i) = srcList(rndNb)
' Remove random value from source list.
For j=rndNb To size-1
srcList(j) = srcList(j+1)
Next
' Size of source list.
size = size-1
Next
' Return unique list.
GetUniqueIntList = uniqueList
End Function
<b>Exempel</b>
Dim list
list = GetUniqueIntList(100,200,50)
For i=0 To 49
Response.Write list(i) & "<br>"
Next
/ Peter