Как уменьшить цикл и добавить 1 к целому числу?

#vb.net

#vb.net

Вопрос:

мне нужна помощь. Может быть, команда «цикл» полезна для этого, но я не знаю, как это сделать. И извините за плохой английский:P Вот более подробно;

Я больше не хочу использовать этот код для моего VB.Сетевое приложение:

         Dim s As String = TypeHere.Text ' Heres target: TypeHere.Text
        Dim Words() As String = s.Split(New Char() {" "c}, StringSplitOptions.RemoveEmptyEntries)
        If Words.Length > 0 Then
            c1 = Words(0)
            If Words.Length > 1 Then
                c2 = Words(1)
            End If
            If Words.Length > 2 Then
                c3 = Words(2)
            End If
            If Words.Length > 3 Then
                c4 = Words(3)
            End If
            If Words.Length > 4 Then
                c5 = Words(4)
            End If
            If Words.Length > 5 Then
                c6 = Words(5)
            End If
            If Words.Length > 6 Then
                c7 = Words(6)
            End If
            If Words.Length > 7 Then
                c8 = Words(7)
            End If
            If Words.Length > 8 Then
                c9 = Words(8)
            End If
            If Words.Length > 9 Then
                c10 = Words(9)
            End If
            If Words.Length > 10 Then
                c11 = Words(10)
            End If
            If Words.Length > 11 Then
                c12 = Words(11)
            End If
            If Words.Length > 12 Then
                c13 = Words(12)
            End If
            If Words.Length > 13 Then
                c14 = Words(13)
            End If
            If Words.Length > 14 Then
                c15 = Words(14)
            End If
            If Words.Length > 15 Then
                c16 = Words(15)
            End If
            If Words.Length > 16 Then
                c17 = Words(16)
            End If
            If Words.Length > 17 Then
                c18 = Words(17)
            End If
            If Words.Length > 18 Then
                c19 = Words(18)
            End If
            If Words.Length > 19 Then
                c20 = Words(19)
            End If
            CMDTime()
        End If
  

Как я могу сделать цикл для этого?:

 If Words.Length > ? Then
    Dim c? 1 = Words(?)
End If
  

Если пользователи ввели длину слов: 4
Автоматическая генерация:

     Dim c5 = Words(4)
    Dim c4 = Words(3)
    Dim c3 = Words(2)
    Dim c2 = Words(1)
    Dim c1 = Words(0)

  

Пример для моей программы;
Пользователь> textbox.text> ввел сколько слов > dim c1 > word1, dim c2 …

Комментарии:

1. Привет! Есть ли причина, по которой вы не используете массив Words вместо своих c переменных?

2. Что ж, я понимаю, почему вы больше не хотите выполнять этот код, но я не уверен, почему вы хотите создавать переменные для хранения каждой строки из вашего массива? Что вы делаете с переменными C1, C2, C3 …. после того, как вы заполнили их словом (x)? Почему вы не можете просто использовать свой массив word () везде, где сейчас находятся переменные C? Надеюсь, я смогу помочь, как только я лучше пойму, что вы пытаетесь сделать, Отметьте

3. Как c? переменные определены прямо сейчас? Где еще они используются?

Ответ №1:

Почему бы не использовать массив? Я не совсем понимаю, что вы пытаетесь сделать, поскольку я не вижу полного кода.

     Dim s As String = "The quick brown fox jumps over the lazy dog"
    Dim Words() As String = s.Split(New Char() {" "c}, StringSplitOptions.RemoveEmptyEntries)
    Dim c(Words.Length - 1) As String
    For x = 0 To Words.Length - 1
        c(x) = Words(x)
    Next

    Console.WriteLine(String.Join("-", c))
    Console.WriteLine(c(0))
    Console.WriteLine(c(1))
  

Вывод:

 The-quick-brown-fox-jumps-over-the-lazy-dog
The
quick
  

Комментарии:

1. @HasanMerkit пожалуйста, выберите этот ответ, если он вам помог.

Ответ №2:

Короткий ответ: нет, вы не можете этого сделать:

     'Nooooo!
    If Words.Length > ? Then
        Dim c? 1 = Words(?)
    End If
  

Но … ты программист, так что все возможно! Просто не всегда так, как мы себе это представляем вначале.

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

Но этого было бы недостаточно, поскольку вы имели в виду, что имена ваших переменных должны быть значимыми. Таким образом, вам пришлось бы создать список KeyValuePair. Ключом будет значимое число, а значением будет строка. Вот так:

     Dim myList As New List(Of KeyValuePair(Of Integer, String))

    Dim index As Integer = 0
    For Each s As String In words
        index  = 1
        myList.Add(New KeyValuePair(Of Integer, String)(index, s))
    Next
  

Но, на самом деле, этот метод довольно шаткий и будет излишне сложным в использовании.

С другой стороны, вы можете объявить массив Words() как модульную переменную в своем классе и обновлять его каждый раз, когда вам нужно его использовать. Ваш предыдущий фрагмент кода будет сокращен до:

     Dim s As String = TypeHere.Text ' Heres target: TypeHere.Text
    Words = s.Split(New Char() {" "c}, StringSplitOptions.RemoveEmptyEntries)

    If Words.Length > 0 Then
        CMDTime()
    End If
  

Теперь вы знаете, что Words(0) это то же самое, что и c1. Вместо этого вы можете использовать слова (0). Однако будьте осторожны, потому что, если вы жестко закодируете подобный индекс, иногда может произойти сбой, если вы выйдете за пределы. Вы можете избежать этого, защитив свой слабый код внутри If Words.Length > x Then блоков, как вы делали раньше. Или, что я предпочитаю, если вам нужно перебирать каждую запись в массиве, делайте это в For Each цикле. Если в массиве есть нулевые элементы, этот цикл не завершится сбоем.

Когда вы думаете об этом, вы уже делали это или почти. Ответ был в тебе с самого начала! Разве это не волшебство?

Если это не помогает, пожалуйста, попробуйте уточнить, что вы ищете. Кто-нибудь обязательно возьмет мяч и поможет!

Получайте удовольствие!

Ответ №3:

Все, что вам нужно, это ваши первые две строки кода:

 Dim s As String = "Hello World"
Dim Words() As String = s.Split(New Char() {" "c}, StringSplitOptions.RemoveEmptyEntries)
  

Тогда вы можете сделать это:

 Console.WriteLine(Words.Length)
Console.WriteLine(Words(0))
Console.WriteLine(Words(1))
  

Это приводит:

2
Здравствуйте
Мир

Просто там, где вы используете, c1 замените его на Words(0) , c2 на Words(1) и т.д. Вы бы использовали Words.Length , чтобы узнать, сколько слов у вас есть.