Bohužel, možná jsem na to již příliš stár, leč Váš výklad mi toho moc neobjasnil. Ale budiž - hlavní je, že se ve svém programu orientujete sám (ta označení jednotlivých labelů a textboxů vznikla jak, mají nějakou zákonitost, nějak jste je vygeneroval nebo napsal otrocky ručně....) Takže se pokusím (bez vazby na skutečnou funkčnost) alespoň rozebrat Váš úryvek kódu (nečekejte ale, že Vám napíšu, kam co máte umístit, když z Vaší ukázky není zřejmé, kde to máte umístěno sám: Takže ve Vašem příkladu deklarujete kolekci náhodných čísel:
Dim kolekceNahodnychCisel As New System.Collections.Generic.List(Of Integer)
Dim nahodneCislo As Integer
Dim generatorNahodnychCisel As New Random
nahodneCislo = generatorNahodnychCisel.Next(193, 208)
While kolekceNahodnychCisel.Contains(nahodneCislo)
nahodneCislo = generatorNahodnychCisel.Next(193, 208)
End While
kolekceNahodnychCisel.Add(nahodneCislo)
Celkem je to jasné, až na jednu drobnost: Vy se postupně snažíte naplnit tuto kolekci "různými" náhodnými čísly v rozsahu 193 - 207. Ale kdy tu kolekci plníte? Dle Vašeho příkladu postupujete takto:
' 1) nadeklarujete novou (čistou) kolekci int čísel:
Dim kolekceNahodnychCisel As New System.Collections.Generic.List(Of Integer)
Dim nahodneCislo As Integer
Dim generatorNahodnychCisel As New Random
' 2) zvolíte první náhodné int číslo v rozsahu 193 - 208:
nahodneCislo = generatorNahodnychCisel.Next(193, 208)
' pokud kolekce již toto číslo obsahuje, zkoušíte čísla jiná
' v našem případě kolekce nic neobsahuje,
' takže cyklus se přeskočí:
While kolekceNahodnychCisel.Contains(nahodneCislo)
nahodneCislo = generatorNahodnychCisel.Next(193, 208)
End While
' nyní přidáte své číslo do kolekce
kolekceNahodnychCisel.Add(nahodneCislo)
If nahodneCislo = 193 Then
' pokud jsme se strefili do čísla 193, pak se provedou
' Vaše různá přepsání
' ...
If Label211.Text = TextBox46.Text Then
' pokud se navíc rovná label211 textboxu46
' provedu další přepisy
' ...
Else
' pokud se label211 nerovná textboxu46
' chcete skočit úplně na začátek
' ještě před deklarace, takže jako první krok po tomto
' odskoku "vynulujete" kolekciNahodnychCisel...
GoTo Line1
End If
End If
' sem se dostanu POUZE v případě, že:
' BUĎ
' nahodneCislo = 193
' Label211.Text = TextBox46.Text
' v tomto případě ale kolekceNahodnychCisel obsahuje číslo jediné a tím je 193 (k čemu to tam potom je?)
' NEBO
' nahodneCislo je různé od 193
' i v tomto případě kolekceNahodnychCisel obsahuje číslo jediné rovné hodnotě nahodneCislo
Bohužel z výše uvedeného mi skutečně uniká smysl, co tím básník chtěl říci. Ač si nejsem jist, zdali Váš kód odpovídá Vašim představám, pokud bych chtěl na stejnou funkčnost napasovat to, co Vám poradil pan Renner, mohlo by to vypadat nějak takto:
Dim opakuj As Boolean = True
While opakuj
Dim kolekceNahodnychCisel As New System.Collections.Generic.List(Of Integer)
Dim nahodneCislo As Integer
Dim generatorNahodnychCisel As New Random
nahodneCislo = generatorNahodnychCisel.Next(193, 208)
While kolekceNahodnychCisel.Contains(nahodneCislo)
nahodneCislo = generatorNahodnychCisel.Next(193, 208)
End While
kolekceNahodnychCisel.Add(nahodneCislo)
If nahodneCislo = 193 Then
If Label211.Text = TextBox46.Text Then
TextBox28.Text = Label193.Text
TextBox29.Text = Label209.Text
TextBox30.Text = Label210.Text
TextBox31.Text = Label211.Text
If TextBox28.Text = Label193.Text Then
Label193.Text = "n"
End If
If TextBox29.Text = Label209.Text Then
Label209.Text = "n"
End If
If TextBox30.Text = Label210.Text Then
Label210.Text = "n"
End If
If TextBox31.Text = Label211.Text Then
Label211.Text = "n"
End If
opakuj = False
End If
Else
opakuj = False
End If
End While
nebo by se to dalo ještě trochu modifikovat:
While True
Dim kolekceNahodnychCisel As New System.Collections.Generic.List(Of Integer)
Dim nahodneCislo As Integer
Dim generatorNahodnychCisel As New Random
nahodneCislo = generatorNahodnychCisel.Next(193, 208)
While kolekceNahodnychCisel.Contains(nahodneCislo)
nahodneCislo = generatorNahodnychCisel.Next(193, 208)
End While
kolekceNahodnychCisel.Add(nahodneCislo)
If nahodneCislo = 193 Then
If Label211.Text = TextBox46.Text Then
TextBox28.Text = Label193.Text
TextBox29.Text = Label209.Text
TextBox30.Text = Label210.Text
TextBox31.Text = Label211.Text
If TextBox28.Text = Label193.Text Then
Label193.Text = "n"
End If
If TextBox29.Text = Label209.Text Then
Label209.Text = "n"
End If
If TextBox30.Text = Label210.Text Then
Label210.Text = "n"
End If
If TextBox31.Text = Label211.Text Then
Label211.Text = "n"
End If
Exit While
End If
Else
Exit While
End If
End While
Samozřejmě neznám souvislosti, takže nemohu posoudit nezbytnost těch vnořených IFů, adt. atd., o nepochopení funkčnosti takovéhoto kódu z mé strany jsem již psal výše. Berte tyto ukázky proto jako mechanické nahrazení konstrukce GOTO konstrukcí za pomocí cyklu.
|