我将尝试举例说明我要解决的问题。我认为这是解释问题的最好方法。
我有一个“ for”循环,可以生成从X到Y的数字。X是我在文本框中输入的范围的下限值,而Y是该范围的上限值。 例如: 1234至4321
因此,该软件生成的值从1234到4321-> 1234,1235,1236,...,4320,4321。 对于I = 1234至4321
我只想将包含较低值文本框中所有数字的生成值添加到列表框中。 例如:
Lower value textbox = 12344
Generated values:
12344 -> valid because it contains 12344
12395 -> not valid because '5' is not contained in 12344
...
44231 -> valid because it contains 12344
41243 -> valid because it contains 12344
我已经写了一些代码,但是我编写得不好,因为当原始字符串(较低值的文本框)包含重复的数字时,它接受无效的值。没有重复的值时,效果很好。
我尝试了不同的代码,但发现了一个链接,该链接似乎可以解决我的问题,但我不知道它是如何工作的。 Check if a string contains all other strings
我尝试过的代码是:
Dim StartNumber As Integer = TextBox_InitialDigit.Text
Dim FinalNumber As Integer = TextBox_FinalDigit.Text
Dim AmountOfResults As Integer
Dim StringOriginal As String = TextBox_InitialDigit.Text
Dim ArraySubstrings As Char() = StringOriginal.ToCharArray()
Dim ContainsAll = False
For I = Convert.ToInt32(TextBox_InitialDigit.Text) To Convert.ToInt32(TextBox_FinalDigit.Text)
For Each Character In ArraySubstrings
If I.ToString.Contains(Character) Then
ContainsAll = True
ElseIf Not I.ToString.Contains(Character) Then
ContainsAll = False
Exit For
End If
Next
If ContainsAll = True Then
ListBox1.Items.Add(I)
AmountOfResults += 1
End If
Next
Label_AmountOfResults.Text = "Total results: " & AmountOfResults
正如我所解释的,如果原始字符串(我在文本框中输入的字符串)不包含重复数字,则上述代码可以正常工作。
我觉得我想做的事情非常容易实现,但是我只是想念它。任何帮助将不胜感激。
答案 0 :(得分:0)
您可以验证组成起始值的有序数字序列在[StartNumber] - [EndNumber]
范围内的任何数字中是否具有对应关系。
给出此值范围:
Dim startNum As Integer = 21434
Dim endNum As Integer = 41350
比较范围内每个生成的值的顺序,如果匹配则将其添加到List(Of Integer)
中。
最后找到的所有匹配项将添加到列表框。
Dim startNChars As Char() = startNum.ToString().ToCharArray().OrderBy(Function(n) n).ToArray()
Dim validResults As New List(Of Integer)()
For i As Integer = startNum + 1 To endNum
If i.ToString().ToCharArray().OrderBy(Function(n) n).SequenceEqual(startNChars) Then
validResults.Add(i)
End If
Next
ListBox1.DataSource = validResults