2013-11-25 4 views
1

Задача домашней работы - просто позволить пользователю ввести значение (строка) «FD__» и сопоставить его со списком известных входов и вернуть true/false. Идентификаторы уже определены и работают хорошо, когда я ввожу идентификатор, который определен как Products(2), который является «FD3», он вернет true, если значение не определено, оно не только не даст никаких результатов, но и приведет к краху программы, поэтому в заключение истинных работ, но ложных нет. Любая информация может быть полезна.Бесконечный цикл при проверке ввода в массив


Дизайн: http://i.imgur.com/bJnFAMX.png


Public Class Form1 

    'variables 
    Dim Products(9) As String 
    Dim Entered As String 
    Dim Found As Boolean 

    Public Sub btnFind_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFind.Click 
     'Product variable array elements 
     Products(0) = "FD1" 
     Products(1) = "FD2" 
     Products(2) = "FD3" 
     Products(3) = "FD4" 
     Products(4) = "FD5" 
     Products(5) = "FD6" 
     Products(6) = "FD7" 
     Products(7) = "FD8" 
     Products(8) = "FD9" 
     Products(9) = "FD10" 
     'process 
     Entered = txtFind.Text 'define entered value as variable 
     Found = FindNumber() 'sub function 
     If Found Then 
      lblResult.Text = Found 'change the results 
     End If 
    End Sub 

    Public Function FindNumber() 
     'If true statements 
     Do While (Found = False) 
      If Entered = Products(0) Then 
       Found = True 
       lblResult.ForeColor = Color.LawnGreen 
      ElseIf Entered = Products(1) Then 
       Found = True 
       lblResult.ForeColor = Color.LawnGreen 
      ElseIf Entered = Products(2) Then 
       Found = True 
       lblResult.ForeColor = Color.LawnGreen 
      ElseIf Entered = Products(3) Then 
       Found = True 
       lblResult.ForeColor = Color.LawnGreen 
      ElseIf Entered = Products(4) Then 
       Found = True 
       lblResult.ForeColor = Color.LawnGreen 
      ElseIf Entered = Products(5) Then 
       Found = True 
       lblResult.ForeColor = Color.LawnGreen 
      ElseIf Entered = Products(6) Then 
       Found = True 
       lblResult.ForeColor = Color.LawnGreen 
      ElseIf Entered = Products(7) Then 
       Found = True 
       lblResult.ForeColor = Color.LawnGreen 
      ElseIf Entered = Products(8) Then 
       Found = True 
       lblResult.ForeColor = Color.LawnGreen 
      ElseIf Entered = Products(9) Then 
       Found = True 
       lblResult.ForeColor = Color.LawnGreen 
      Else 'keeps crashing 
       Found = False 
       lblResult.ForeColor = Color.Red 
      End If 
     Loop 
     Return Found 
    End Function 
End Class 
+0

Это не сбой. 'FindNumber()' - бесконечный цикл, потому что 'Found' всегда будет false (Do While Found = False). Вместо того, чтобы делать инструкции while, прокручивайте Products() только один раз и возвращайте true или false. – Jaxedin

ответ

0

Вы действительно можете сделать это с много меньше кода ... Я буду идти вперед и делать некоторые критики в то время как у него.

'1. Functions should have return types 
'2. You should pass the function what it needs to do its job 
Public Function FindNumber(numberEntered As String) As Boolean 
    'Rather than evaluating if a condition is true or false, and then returning 
    'true or false, you can just directly return the condition. 
    Return Products.Contains(numberEntered) 
End Function 

Затем в основной программе:

'This doesn't need to be a class level variable 
Dim entered = txtFind.Text 
'Local variables should be lowercase 
Dim found = FindNumber(entered) 
If found Then 
    'With Option Strict you can't assign a Boolean to a String... 
    'but you can do .ToString() instead 
    lblResult.Text = found.ToString() 
    'And this was really dependent on the result of the function... 
    'Also it has nothing to do with finding the number... 
    lblResult.ForeColor = Color.LawnGreen 
Else 
    lblResult.ForeColor = Color.Red 
End If 

Это выглядит намного дольше, но вынимают комментарии, и я обещаю вам, что это будет намного проще (и короче) программы.

0

Вы можете оптимизировать весь этот код, используя .Contains работать таким простым, как это используется:

если mylist.contains («SOMETEXT»), то «изменение ForeColor к зеленому еще » изменение ForeColor на красный конец, если

Это уменьшит вашу проблему.

+0

Я уже знаю этот вариант, проблема в том, что фактическое задание просит вас сделать это вот так. – Cem

Смежные вопросы