Vergleich liefert immer 0

.NET VB08
Hallo, ich habe folgenden Code:

 Dim gemischtekarte As Short
 Public Function kartenmischen()
 Dim r As New Random()
 gemischtekarte = r.Next(1, 37)
 End Function
 Dim karte1 As Short
 Dim karte1b As Boolean = 0
 Dim karte2 As Short
 Dim karte2b As Boolean = 0
 Dim karte3 As Short
 Dim karte3b As Boolean = 0
 Dim karte4 As Short
 Dim karte4b As Boolean = 0
 Dim karte5 As Short
 Dim karte5b As Boolean = 0
 Dim karte6 As Short
 Dim karte6b As Boolean = 0
 Dim karte7 As Short
 Dim karte7b As Boolean = 0
 Dim karte8 As Short
 Dim karte8b As Boolean = 0
 Dim karte9 As Short
 Dim karte9b As Boolean = 0
 Dim karte10 As Short
 Dim karte10b As Boolean = 0
 Dim karte11 As Short
 Dim karte11b As Boolean = 0
 Dim karte12 As Short
 Dim karte12b As Boolean = 0
 Dim karte13 As Short
 Dim karte13b As Boolean = 0
 Dim karte14 As Short
 Dim karte14b As Boolean = 0
 Dim karte15 As Short
 Dim karte15b As Boolean = 0
 Dim karte16 As Short
 Dim karte16b As Boolean = 0
 Dim karte17 As Short
 Dim karte17b As Boolean = 0
 Dim karte18 As Short
 Dim karte18b As Boolean = 0
 Dim karte19 As Short
 Dim karte19b As Boolean = 0
 Dim karte20 As Short
 Dim karte20b As Boolean = 0
 Dim karte21 As Short
 Dim karte21b As Boolean = 0
 Dim karte22 As Short
 Dim karte22b As Boolean = 0
 Dim karte23 As Short
 Dim karte23b As Boolean = 0
 Dim karte24 As Short
 Dim karte24b As Boolean = 0
 Dim karte25 As Short
 Dim karte25b As Boolean = 0
 Dim karte26 As Short
 Dim karte26b As Boolean = 0
 Dim karte27 As Short
 Dim karte27b As Boolean = 0
 Dim karte28 As Short
 Dim karte28b As Boolean = 0
 Dim karte29 As Short
 Dim karte29b As Boolean = 0
 Dim karte30 As Short
 Dim karte30b As Boolean = 0
 Dim karte31 As Short
 Dim karte31b As Boolean = 0
 Dim karte32 As Short
 Dim karte32b As Boolean = 0

 Private Sub stapelmischen() Handles bspielstarten.Click
 If karte1b = 0 Then
 kartenmischen()
 karte1 = gemischtekarte
 karte1b = 1
 End If
 If karte2b = 0 Then
 kartenmischen()
 If gemischtekarte karte1 Then
 karte2 = gemischtekarte
 karte2b = 1
 Else : kartenmischen()
 End If
 End If
 tbchat.Text = karte1
 tbchateingabe.Text = karte2
 End Sub

Wie ihr seht soll einer Variable ein Zufallswert zugewiesen werden der ungleich den anderen Variablen ist. Wenn ich das aber durchlaufen lasse liefert mir die Vatiable karte2 immer den Wert 0.
Kann mir wer helfen. Bin absolouter Neuling.
-Flaiker :wink:

.NET VB08
Hallo, ich habe folgenden Code:

Dim gemischtekarte As Short
Public Function kartenmischen()
Dim r As New Random()
gemischtekarte = r.Next(1, 37)
End Function

Hallo,

in der Funktion Kartenmischen wird jedes mal ein neuer Zufallszahlengenerator erzeugt. Manche Zufallszahlengeneratoren beginnen jedesmal mit der gleichen Zahl, oder beziehen ihren „Zufall“ aus der Uhrzeit. Falls zwischen den beiden Aufrufen nicht genug Zeit vergangen ist, kommt das gleiche heraus.

Also: mit r als globaler Variablen sollte es gehen.

Noch ein Tipp: Die Spielkarten lassen sich am besten in einem Array speichern

und dann mit einer for-schleife abarbeiten.

Grüße
Thorsten

Hallo Flaiker,

also ich hab den Code mal getestet. Wenn man auf den Button Klickt und dann das Preborium aufruft, so klappt alles. Die 2 Karten bekommen verschiedene Werte!
Aber mal ehrlich, das was du hier fabrizierst ist nicht gerade sonderlich schön :confused:
Erst einmal sprengst du mit den ganzen Declarationen den Rahmen. Dann kommen immer die selben Werte raus.Random ist nicht gleich zufaellig, sondern die Zahlen werden nach einem gewissen Schema erzeugt!
Auch mischst du in deinem Code nur 2 Karten! Wozu dann die ganzen Declarationen? Warum packst du die Karten nicht in ein Array?
Dann hast du eine Variable als Boolean erstellst, weisst ihr aber Werte zu alla 0 und 1. Besser waere True und False zu nutzen :smile: wenn es schon vom Typ Boolean sein sollte :wink:

Sicherlich führen viele Wege nach Rom. Welchen du nimmst das liegt an Dir :smile:

Aber anbei mal ein kurzes Demo, wie du die 32 Karten mischen kannst :smile:

Public Class Form1

 Dim Karte(31, 1) As Integer

 Private Sub bspielstarten\_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bspielstarten.Click
 Mische()
 End Sub


 Public Sub Mische() 
 Dim r As New Random(Now.Millisecond)
 For I As Integer = 0 To 31
 Karte(I, 0) = -1
 Karte(I, 1) = 0
 Next
 For I = 0 To 31
 Dim vRet As Integer
 vRet = r.Next(0, 31)
 While Karte(vRet, 0) \> -1
 vRet = (vRet + 7) Mod 32
 End While
 Karte(vRet, 0) = I
 Karte(vRet, 1) = 1
 Next
 End Sub
End Class

MfG Alex

Also,
danke ersma für die Antworten. Warum ich das in kein Array packe? Weil ich leider nicht weiß wie ich das anstelle (ja ich = no0b). Warum ich nur 2 Karten mische? Weil ich bevor ich für alle Karten einen endlos langen code eingebe ersma testen wollte ob es funktioniert.
Werde jetzt mal versuchen eure Antworten umzusetzen.

-Flaiker

Hallo Flaiker,

wieso einen riesigen Source?
Das was ich dir gepostet habe, mischt alle Karten und solang ist der Source net :wink:
Was ich aber net verstehe. Wozu brauchst du die 0 oder 1 für jede Karte? Je nach vorhaben würde es sich sogar anbieten dafür eine Klasse zu basteln :wink:

MfG Alex