random überspringt grenzwert

drachentor1

Grünschnabel
hallo zusammen,
hab ein problem mit einer random variable.
der anfangswert ist 1 und maximalwert ist 200
wenn ich jetzt abfrage klappt das zu 80 %, nur bräuchte ich 100%. :D

hier der code :
Code:
Imports System.IO.File
Imports System.IO



Public Class Port_Scanner

    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
        Dim i As Integer
        Dim ii As Integer
        Dim port As Integer
        Dim r As New System.Random(Now.Minute)
        Dim s As New SpeechLib.SpVoice
        Dim text As String


        If TextBox1.Text = "190.076.154.015" Then

            port = r.Next(1, 200)
            Label2.Visible = True
            ii = Convert.ToInt32(port)
            Timer2.Enabled = True




            For i = 1 To 1 Step 1


                i = Convert.ToInt32(Label2.Text)
                ii = port


                i += 1
                Label2.Text = i.ToString()
                If i = ii Then




                    Label2.Text = ii.ToString()
                    Label3.Visible = True
                    Label3.Text = "Gefunden ... !"

                    Timer2.Enabled = False
                    Timer2.Stop()
                    Form1.RichTextBox1.Text = Form1.RichTextBox1.Text + vbNewLine + "Port " + Label2.Text + vbNewLine + "ist offen"
                    text = "found open port on " & Label2.Text
                    Form1.TextBox1.Focus()
                    Form1.TextBox1.Select()
                    s.Speak(text)
                    Form1.Label4.Text = "Port : " & Label2.Text
                    Form1.Label4.Visible = True
                    Me.Close()
                    TextBox1.Text = ""
                    Label3.Visible = False
                    Form1.TextBox1.Text = ""
                    Form1.TextBox1.Focus()
                    Form1.TextBox1.Select()


                End If

            Next






        Else
            MsgBox("Keine IP vorhanden die einen Port hat", MsgBoxStyle.OkOnly, "Portscan Fehler")
            Timer2.Enabled = False
            Timer2.Stop()



        End If

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Label2.Text = 1
        Timer2.Start()
        Timer2.Interval = 1
    End Sub

    Private Sub Port_Scanner_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Label2.Visible = False
        TextBox1.Text = ""


    End Sub
End Class
hab ich irgendetwas übersehen ?
oder eine variable falsch gesetzt ?
bin für jeden hinweis dankbar,
mfg
 
Was passiert denn bei den anderen 20%?
Folgende Zeile sollte korrekt eine Zufallszahl aus {1,2,3,.......,197,198,199} ausgeben.
Visual Basic:
port = r.Next(1, 200)

Wozu wählst du denn zufällig einen Port aus?
 
genau das ist mein problem ab und zu geht das ganze über die grenze hinaus und ich weiss nicht warum.

zb läuft es weiter bis ich abdrehe ohne dass es einen fehler wirft

habs heut nochmal versucht un bei 1892 abgedreht wobei es ja bei 200 vorbei sein sollte.

mfg
 
Was sollte da denn "vorbei sein"?
Ich verstehe deinen Code auch nicht ganz. Wieso hast du da eine For-Schleife die gar nicht zählt (Von 1 bis 1)? Und warum erhöhst du dann aber die Zähl-Variable von Hand innerhalb der Schleife?
Ich glaube du hast da ein Verständnisproblem. Dein Timer hört auf, sobald deine Zähl-Variable dem Zufallswert entspricht ("If i = ii Then"). Das kann auch erst nach einer Millionen Durchläufen passieren. Deshalb auch Zufallszahl.

Edit: Da du den Zufallsgenerator vor jedem Gebrauch neu initialisierst (mit dem gleichen Startwert, denn Now.Minute ändert sich nur jede Minute :-D), bekommst du bei jedem Timer-Tick die gleiche Zufallszahl (und das bis zu eine Minute lang)
 
Zuletzt bearbeitet:
Was sollte da denn "vorbei sein"?
Ich verstehe deinen Code auch nicht ganz. Wieso hast du da eine For-Schleife die gar nicht zählt (Von 1 bis 1)? Und warum erhöhst du dann aber die Zähl-Variable von Hand innerhalb der Schleife?
Ich glaube du hast da ein Verständnisproblem. Dein Timer hört auf, sobald deine Zähl-Variable dem Zufallswert entspricht ("If i = ii Then"). Das kann auch erst nach einer Millionen Durchläufen passieren. Deshalb auch Zufallszahl.

mfg
 
hm versteh nicht was du meinst mit millionen durchläufen.

zum besseren verständnis:

ich lasse eine zufallszahl generieren
zeige dann ein label mit der zahl 1
dieses wird in einem durchlauf immer pro sekunde um 1 erhöht
und das ganze solange bis das label mit der zufallszahl gleich ist

und genau hier ist das problem das klappt 20 mal zb beim 21igsten mal eben nicht.
das versteh ich nicht wo liegt dann mein fehler ?
der debugger zeit ja auch keinen fehler an.

mfg
 
Durch deine Privatnachricht weiß ich jetzt, wo genau dein Denkfehler liegt.

Du zählst jede Sekunde eins Dazu (1,2,3,4,5) und willst damit aufhören, sobald der Zufallsgenerator den gleichen Wert wie dein Zähler hat. Es kann aber passieren, dass das nie Eintritt.
Das liegt daran, dass jede Sekunde die Wahrscheinlichkeit für einen Treffer nur 1/199 (die 200 ist exklusiv) ist. Wenn du jetzt 200 Sekunden gewartet hast (der Zähler ist inzwischen bei 200) und du hattest in der Zeit keinen Treffer, dann wirst du auch in Zukunft keinen Treffer mehr bekommen können, weil ab diesem Punkt völlig ausgeschlossen ist, dass der Zufallswert dem Zähler entspricht, weil der Zähler außerhalb des Bereichs ist.

Du solltest also zusätzlich noch überprüfen, ob du bei 200 angekommen bist (dann eben ohne einen Treffer gehabt zu haben).
 
Oh danke, das hab ich nicht bedacht !

dachte, dass die zahl immer in diesem fall zwischen 1 und 200 liegt !
etwas dazugelernt ,
herzlichen dank
 

Neue Beiträge

Zurück