我们正在尝试仅将“ a”的第一个实例替换为first second third
。然后,它将循环并替换第二个实例“ a”为新的生成值,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
您的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])
在开始时返回一个子串STARTING ...它不会替代并返回整个东西。的第二遍结果abaca
为701ca
。一个列表框将向您显示。
对于ababfdsfac
替换,结果为:
您只能从当前的起始值获得零件
编辑
这是一个执行您想要的操作的循环。我使用VB6类型的方法,因为OP代码比.Net的样式更多。
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
高温超导
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句