0
For i = 1 To 5
    If i = 0 Then
        i = i + 1
    ElseIf i Mod 2 = 0 Then
        LabelEvens.Text = i
        i = i + 1
    Else
        LabelOdds.Text = i
        i = i + 1
    End If
Next i

我正在 VB 中制作一个程序,我必须使用 for 循环在 2 个数字(循环限制 1 和 2)之间进行排序,并找出它们是偶数还是奇数,然后将结果输出到 2 个标签。这个循环对我来说很有意义,但是例如当我输入 1 和 4 时,它输出的只是奇数标签中的 5。我想我的问题是任何人都可以看到我的循环的问题吗?

4

3 回答 3

3

您不需要i手动将 1 添加到循环变量中,for循环本身会在幕后为您执行此操作:

For i = 1 To 5
    If i Mod 2 = 0 Then
        LabelEvens.Text = i
    Else
        LabelOdds.Text = i
    End If
Next i

您会注意到我也删除了该If i = 0位,因为i在该循环中永远不能为零。它的范围从一到五。

您需要做的另一件事是将值附加到文本框中。您目前拥有的是替换,因此它只会设置为最后处理的值。像这样的东西就足够了:

' Initialise to empty strings '

LabelEvens.Text = ""
LabelOdds.Text = ""

' Append the values '

For i = 1 To 5
    If i Mod 2 = 0 Then
        LabelEvens.Text = LabelEvens.Text & "," & CStr(i)
    Else
        LabelOdds.Text = LabelOdds.Text & "," & CStr(i)
    End If
Next i

' Remove initial comma from both '

LabelEvens.Text = Mid(LabelEvens.Text,2)
LabelOdds.Text = Mid(LabelOdds.Text,2)
于 2013-10-31T01:41:25.110 回答
1

您的代码中的一些问题:

For i = 1 To 5
    If i = 0 Then                 <-- 'I' will never be 0 since you start from 1
        i = i + 1                 <-- Don't manually increment since you are using a for
    ElseIf i Mod 2 = 0 Then
        LabelEvens.Text = i
        i = i + 1                 <-- Don't manually increment since you are using a for
    Else
        LabelOdds.Text = i
        i = i + 1                 <-- Don't manually increment since you are using a for
    End If
Next i

你遇到的另一个问题是,如果你在 for 范围内有多个奇数(比如在 1 到 10 的范围内),你只会得到最后一个数字。在这种情况下你想做什么?连接字符串中的所有奇数还是在找到第一个奇数后停止?你真的需要一个 FOR 循环吗?

于 2013-10-31T01:44:03.767 回答
0

你也可以声明

LabelEvens.Text=""  'Clear contents of the label before assigning new values
LabelOdds.Text=""
   For i As Integer = 1 To 5
        If i Mod 2 = 0 Then
            LabelEvens.Text = LabelEvens.Text & i
        Else
            LabelOdds.Text = LabelOdds.Text & i
        End If
   Next

如果您想要总计,可以从上方将“&”替换为“+”。

于 2018-11-02T13:12:53.120 回答