做直到循环检查重复不会停止循环
问题描述:
我试图做一个直到循环来检查我的组合框中的重复项。它运行循环,但它永远不会停止循环。做直到循环检查重复不会停止循环
Dim i As Integer = 0
Dim flavors As Integer = flavorsComboBox.Items.Count
Do Until (i < flavors - 1)
If flavors = flavorsComboBox.Items.Count Then
MessageBox.Show("Flavor Already Exists!", "Error")
Else
flavorsComboBox.Items.Add(flavorsComboBox.Text)
End If
Loop
答
你是不是重置口味的价值
试试这个:
Dim i As Integer = 0
Dim flavors As Integer = flavorsComboBox.Items.Count
Do Until (i < flavors - 1)
If flavors = flavorsComboBox.Items.Count Then
MessageBox.Show("Flavor Already Exists!", "Error")
Else
flavorsComboBox.Items.Add(flavorsComboBox.Text)
flavors = flavorsComboBox.Items.Count
End If
Loop
答
下面是一个简单的做,直到环
Dim i as integer = 0
Dim flavors as Integer = 10
do until (i > flavors -1)
Console.WriteLine(i.ToString())
i = i +1
loop
输出
0
1
2
3
4
5
6
7
8
9
在您的代码:
do until (i < flavors - 1)
若i = 0和口味是计数-1时大于count 0,进入循环的状态。
接下来的遗漏是,您永远不会更改循环条件变量的值,以准确评估停止循环的条件。
答
循环的条件着眼于i
变量和flavors
变量:
Do Until (i < flavors - 1)
但这些变量永远不要在循环体中的任何一点变化:
If flavors = flavorsComboBox.Items.Count Then
MessageBox.Show("Flavor Already Exists!", "Error")
Else
flavorsComboBox.Items.Add(flavorsComboBox.Text)
End If
您需要添加代码来更改其中一个或两个变量。但是,这仍然是难以实现的目标。只需使用Distinct()
方法:
Dim items = flavorsComboBox.Items.Distinct().ToArray()
flavorsComboBox.Items.Clear()
flavorsComboBox.Items.AddRange(items)
+0
没有想到这样做,太棒了! – CheGueVerra 2015-03-19 02:40:04
答
试试这个:
Option Strict On
Option Explicit On
Option Infer Off
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If AddDistinct(flavorsComboBox, "test") Then
MsgBox("Item did not exist, so it was added.")
Else
MsgBox("Item already existed, so it was not added.")
End If
End Sub
Public Function AddDistinct(cboBox As ComboBox, value As Object) As Boolean
If cboBox.Items.IndexOf(value) = -1 Then cboBox.Items.Add(value) : Return True
Return False
End Function
End Class
现在,当我测试,我没有得到任何错误消息。 – zalemam 2015-03-19 02:15:48
这是如何解决问题的?除非_flavorsComboBox_中包含少于2个项目,否则您将收到无限循环的消息框,因为_i_永远不会更改,并且始终为0. – 2015-03-19 13:49:18