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

私は、for ループを使用して 2 つの数値 (ループ制限 1 と 2) を並べ替え、それらが偶数か奇数かを調べ、結果を 2 つのラベルに出力する必要がある VB でプログラムを作成しています。このループは私には理にかなっていますが、たとえば、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範囲は 1 から 5 までです。

もう 1 つ行う必要があるのは、テキスト ボックスに値を追加することです。現時点で持っているのは、処理された最後の値にのみ設定されるように交換することです。次のようなもので十分です。

' 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

もう 1 つの問題は、for の範囲 (たとえば 1 から 10 の範囲) に複数の奇数がある場合、最後の数字しか得られないことです。この場合、どうしたいですか?文字列内のすべての奇数を連結するか、最初の奇数が見つかった後に停止しますか? FORループは本当に必要ですか?

于 2013-10-31T01:44:03.767 に答える