Если оператор не улавливает условие перехвата

#vb.net #visual-studio #loops #charts

#vb.net #visual-studio #циклы #Диаграммы

Вопрос:

Я перебираю список десятичных дробей и использую оператор if, чтобы перехватывать любые ненужные данные и не отображать их, если они появляются в списке, хотя оператор if, похоже, не улавливает это, и ненужные данные все равно отображаются. Я пробовал Continue для и вообще выйти из подзаголовка, но, похоже, он редко перехватывается. Мой код ниже:

 For i = 1 To 8
            If hotTemps(i - 1) > 3000 Or hotTemps(i - 1) < -400 Then
                Continue For
            End If
            If celsius.Checked And sysTime.Checked Then
                Chart1.Series(i - 1).Points.AddXY(TimeOfDay.ToString("HH:mm:ss"), CDec(hotTemps(i - 1)))
            ElseIf fahrenheit.Checked And sysTime.Checked Then
                Chart1.Series(i - 1).Points.AddXY(TimeOfDay.ToString("HH:mm:ss"), CDec((hotTemps(i - 1))) * 1.8   32)
            ElseIf celsius.Checked And elapsedTime.Checked Then
                Chart1.Series(i - 1).Points.AddXY(elapsed, CDec(hotTemps(i - 1)))
            ElseIf fahrenheit.Checked And elapsedTime.Checked Then
                Chart1.Series(i - 1).Points.AddXY(elapsed, CDec((hotTemps(i - 1))) * 1.8   32)
            End If
Next
  

Комментарии:

1. Or В первом If операторе это сделает … если любой из них верен, то он будет продолжаться.

2. опубликуйте содержимое массива hottemps / определение функции hottemps

3. Ну, в значительной степени проблема отладки, поэтому действительно пошаговое выполнение кода и проверка состояния в каждой точке должны дать ваш ответ. Однако я вижу одну вещь: i = от 1 до 8, тогда вы проверяете, превышает ли i-1 3000 или меньше -400. i никогда не будет где-либо вблизи этих верхних или нижних пределов, поэтому ваш Continue For просто никогда не сработает

4. @Hursey, сравнения с 3000 и -400 не выполняются i - 1 , а скорее hotTemps(i - 1) .

5. @jmcilhinney. Совершенно верно, когда-нибудь научусь читать. Пункт об отладке все еще остается в силе, хотя

Ответ №1:

Упростите свой цикл, чтобы проверить свою логику.

     Dim lst As New List(Of Integer)
    For a = 0 To 7
        If a > 6 Or a < 3 Then
            Continue For
        End If
        lst.Add(a)
    Next
    For Each i In lst
        Debug.Print(i.ToString)
    Next
  

Это приводит к

 3
4
5
6
  

Это ожидаемый результат?