новая строка на метке vb. net в цикле for next - PullRequest
0 голосов
/ 09 июля 2020

как мне получить новую строку между каждым случайным идентификатором 8 di git, который я создал, на одной этикетке?

Public Class Form1
    'Write a program to display 1000 8-character random user IDs in a text 
    'box after you click a button.  Make sure the program verifies that none Of the IDs are identical. 
    'Each userid should include a mixture Of alphabetic characters And numbers.

Private Sub btnGenerateRandomID_Click(sender As Object, e As EventArgs) Handles btnGenerateRandomID.Click
    Dim strChar As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
    Dim rand As New Random
    Dim strID As String
    Dim IdCheck As New List(Of String) With {.Capacity = 1000}

    For count_ids As Integer = 0 To 999
        For count_chars As Integer = 0 To 7
            strID += strChar(rand.Next(0, 62))
        Next

        If Not IdCheck.Contains(strID) Then
            IdCheck.Add(strID)
        End If
    Next

    lblRandomId.Text = strID

1 Ответ

0 голосов
/ 09 июля 2020

Пара вещей ...

Вам нужно сбрасывать strID между каждым сгенерированным идентификатором, иначе он просто станет длиннее, длиннее и длиннее, и ... вы поняли.

Вместо жесткого кодирования случайного числа от 0 до 62 используйте свойство .Length из strChar. Таким образом, если вы измените символы, доступные в этой строке, ваш код не нужно будет изменять относительно выбранного случайного символа.

Говоря о случайном, вы должны объявить это как static, чтобы он создается только один раз и повторно используется при каждом вызове. В противном случае, если вы щелкнете очень быстро, вы действительно можете получить те же результаты, поскольку при создании экземпляра Random без параметра в качестве начального значения используются системные часы.

Если ваш идентификатор не был уникальным, он выиграл ' не будет добавлено. В этом случае у вас будет меньше 1000 идентификаторов. Вы должны продолжать зацикливаться, пока не найдете тот, которого нет в списке.

Наконец, я бы просто использовал String.Join() с Environment.NewLine, чтобы добавить все идентификаторы в метку.

Вот как могут выглядеть эти изменения:

Dim strChar As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
Static rand As New Random
Dim strID As String
Dim IdCheck As New List(Of String) With {.Capacity = 1000} 'copyright stackoverflow inquiry

For count_ids As Integer = 0 To 999
    Do
        strID = ""
        For count_chars As Integer = 0 To 7
            strID += strChar(rand.Next(strChar.Length))
        Next
    Loop While IdCheck.Contains(strID)
    IdCheck.Add(strID)
Next

lblRandomId.Text = String.Join(Environment.NewLine, IdCheck)
...