1

「a」の最初のインスタンスのみを に置き換えようとしていますfirst second third。次に、ループして "a" の 2 番目のインスタンスを新しく生成された値に置き換え、first second third"a" の文字がなくなり、それぞれの "a" が異なる値になるまでこのループを続けます。ただし、出力の結果は正しくありません。このコードは、最後の「a」の前のすべての文字を消去してから、最後の「a」を置き換えています。

    Dim message As String
    Dim start As Integer = 1
    Dim letterfinder As String
    Dim timesLooped As Integer = 1
    Dim length As Integer

    Dim first As Integer
    Dim second As Integer
    Dim third As Integer
    Dim count As Integer = 1

    message = inputBox.Text
    length = Len(message)
    timesLooped = 0
  While length > timesLooped
        Dim random As New Random
        letterfinder = Mid$(message, start, 1)
        If letterfinder = "a" Then
            first = random.Next(3, 9)
            second = 1 \ first
            third = 1 - second
            outputBox.Text = Replace(message, letterfinder, first & second & third, [start], [count])
        End If
        timesLooped = timesLooped + 1
        start = start + 1
    End While
4

2 に答える 2

0

output.text ボックスには最終結果が表示されているだけです (中間の変更は速すぎてわかりません)。進行状況を監視するリストボックスを追加します。

   If letterfinder = "a" Then
       first = random.Next(3, 9)
       second = 1 \ first
       third = 1 - second

       Dim res As String = Replace(message, letterfinder, _
                   first & second & third, [start], [count])
       txtOutput.Text = res
       ListBox1.Items.Add(timesLooped.ToString & vbTab & res)
   End If


Replace(message, "a", first & second & third, [start], [count]) 

開始時に開始する部分文字列を返しています...それは置換せず、すべてを返します。の 2 回目のパスの結果abacaは です701ca。リストボックスにそれが表示されます。置換の結果は次のとおりです
ababfdsfac

  1. 701babfdsfac
  2. 801bfdsfac
  3. 301c

現在の開始値からの部分だけを取得します

編集

これは、あなたが望むことをするループです。OPコードは.Netよりもはるかにそのスタイルだったので、VB6タイプのメソッドを使用しました

    Dim first As Integer
    Dim result As String = ""
    Dim random As New Random
    ListBox1.Items.Clear()

    For n As Integer = 1 To Len(message)
        If Mid$(message, n, 1) = "a" Then

            first = random.Next(3, 9)
            result = result & CStr(first)
            result = result & CStr(1 \ first)               ' always 0
            result = result & CStr(1 - (1 \ first))         ' always 1
        Else
            result = result & Mid$(message, n, 1)

        End If

        txtOutput.Text = result
        ListBox1.Items.Add(result)                  ' post interim results
    Next

HTH

于 2013-09-28T01:36:07.870 に答える