Случайный выбор строки (имена строк точно такие же, кроме номера) - PullRequest
0 голосов
/ 28 января 2020
Dim rnd As New Random
Dim quote1, quote2, quote3 As String
Dim int As Integer

int = rnd.Next(1, 3)
quote1 = "never give up"
quote2 = "always believe in yourself"
quote3 = "always follow your dreams"

MessageBox.Show("quote" & int)

Эй, кто-нибудь, пожалуйста, скажите мне, как я могу назначить int для слова quote, чтобы каждый раз он выбирал другую цитату?

Ответы [ 2 ]

1 голос
/ 28 января 2020

Только с 3 кавычками вы можете сделать что-то вроде

    Dim quoteIndex As Integer = Rnd.Next(1, 3)
    Dim quote As String = ""
    Select Case quoteIndex
        Case 1
            quote = quote1
        Case 2
            quote = quote2
        Case 3
            quote = quote3
    End Select
    MessageBox.Show(quote)

Но, честно говоря, это довольно неудачное решение, больше похожее на код ниндзя, чем на хорошие практики. Вместо этого вы должны использовать массив или список (которые могут быть созданы внутри этого метода или получены из другого места, например, перегрузки или модальной переменной):

    Dim quoteList As New List(Of String)
    quoteList.AddRange({"never give up", "always believe in yourself", "always follow your dreams", "something else"})

    Dim quoteChoosen As Integer = Rnd.Next(0, quoteList.Count)  'this array start at zero
    MessageBox.Show(quoteList(quoteChoosen))  '

Если ваш список развивается со временем (при условии, что он где-то хранится в переменной), ваш метод не нуждается в обновлении. Ваш пользователь может добавить свои мотивационные цитаты в список, не нарушая ваш код, например.

0 голосов
/ 28 января 2020

Когда ваш код написан, вы показываете строковое значение в MessageBox. К этой строке добавляется строка, поэтому она является динамической c и случайной, но она все еще является строкой.

Чтобы получить эффект, который, я думаю, вы ищете, вам нужно использовать случайное значение как некоторый указатель для ссылки на значение переменной. Использование массива, вероятно, самый простой способ сделать это с помощью этого кода. Вместо того, чтобы иметь 3 различных значения строк в кавычках, вы можете создать массив строк ... что-то вроде

quote = новая строка []

где

quote [0] = "никогда не сдавайся"

тогда вы можете сделать что-то вроде MessageBox.Show (quote [int])

...