web-dev-qa-db-ja.com

偶数または奇数を取得する方法

このプログラムが機能しない理由がわかりません。乱数を取得すると、コンピューターはそれが偶数か奇数かを選択しますか?

Dim a As New Random()

    Dim b As Integer
    Dim ca As Integer
    b = a.Next(0, 10)
    Debug.Print(b)

    ca = b / 2

    If ca = 0 Then
        Debug.Print("Even")
    Else
        Debug.Print("Odd")
    End If
4
Didy

あなたはあなたのオペレーターを台無しにしています。

除算/を使用しますが、モジュロ演算子Modを使用します。

注意:C#では%です。 VB.NetではModです

参照: http://msdn.Microsoft.com/en-us/library/se0w9esz(v = vs.100).aspx

Dim a As New Random()
Dim b As Integer
Dim ca As Integer
b = a.Next(0, 10)
Debug.Print(b)

ca = b Mod 2

If ca = 0 Then
    Debug.Print("Even")
Else
    Debug.Print("Odd")
End If

コードが期待どおりに機能しない理由:原因は確かにifステートメントです。 b / 2の結果が0であるかどうかを確認しています。ただし、これはb自体が0の場合にのみ当てはまります。0より大きいすべての数値を半分で割ると、0より大きいことになります。

コードは、除算の余りをチェックしたいように見えます。したがって、モジュロ演算子を使用したソリューションです。

12
Marco

下位ビットをチェックすることもできます。オンの場合は奇数、オフの場合は偶数です。関数の使用:

    Dim a As New Random()
    Dim b As Integer
    b = a.Next(0, 10)
    Debug.WriteLine(b)
    If isEven(b) Then
        Debug.WriteLine("even")
    Else
        Debug.WriteLine("odd")
    End If

Private Function isEven(numToCheck As Integer) As Boolean
    Return (numToCheck And 1) = 0
End Function

編集:modよりも速いかもしれませんが、チェックしていません。

5
dbasnett
Private sub command1_click()
   Dim a as integer
   a = text1.text
   If a mod 2=0 then
      Print a & " is even"
   Else
      Print a & "is odd"
   Endif
End sub
0