0

前回活動を行いました。同級生のpythonコードをvbに変換していました...これが私の最終的なコードであり、実行中です。

Private Sub txtInput_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
    curyear = Int(2013)
    a = Int((curyear - txtInput.Text) Mod 12)



        txtInput.Text = " "
        If (a = 9) Or (a = -3) Then
            txtOutput.Text = "Your zodiac sign is Snake"
        ElseIf (a = 8) Or (a = -4) Then
            txtOutput.Text = "Your zodiac sign is Dragon"
        ElseIf (a = 7) Or (a = -5) Then
            txtOutput.Text = "Your zodiac sign is Rabbit"
        ElseIf (a = 6) Or (a = -6) Then
            txtOutput.Text = "Your zodiac sign is Tiger"
        ElseIf (a = 5) Or (a = -7) Then
            txtOutput.Text = "Your zodiac sign is Ox"
        ElseIf (a = 4) Or (a = -8) Then
            txtOutput.Text = "Your zodiac sign is Rat"
        ElseIf (a = 3) Or (a = -9) Then
            txtOutput.Text = "Your zodiac sign is Pig"
        ElseIf (a = 2) Or (a = -10) Then
            txtOutput.Text = "Your zodiac sign is Dog"
        ElseIf (a = 1) Or (a = -11) Then
            txtOutput.Text = "Your zodiac sign is Rooster"
        ElseIf (a = 0) Or (a = -2) Then
            txtOutput.Text = "Your zodiac sign is Monkey"
        ElseIf (a = 11) Or (a = -1) Then
            txtOutput.Text = "Your zodiac sign is Sheep"
        ElseIf (a = 12) Or (a = 0) Then
            txtOutput.Text = "Your zodiac sign is Horse"
        End If
    End If

    End Sub

私たちの教授は ascii 13/enter の他の使い方について教えてくれました... 私は彼をよく理解できません。私のコードのどこが間違っていると思いますか? 実行中ですが、彼は私のコードが間違っていると言いました。

4

2 に答える 2

2

まず、コードを少しクリーンアップします。

  • これらすべての Else If ステートメントを使用する代わりに、Select Case を使用することをお勧めします。
  • 3行目または4行目に Int() する必要はありません。それはすでに整数です。
  • また、「あなたの星座は」の文字列を繰り返す必要はありません。一度だけ使用してください。
  • Deanna が言ったように、テキスト ボックスの入力から ASCII 13 を削除する必要があります。

したがって、新しいコードは次のとおりです。

Private Sub txtInput_KeyPress(KeyAscii As Integer)
   Dim ZodiacAnimal As String
   If KeyAscii = 13 Then
      curyear = 2013
      a = (curyear - txtInput.Text) Mod 12
      Select Case a
         Case 9, -3
            ZodiacAnimal = "Snake"
         Case 8, -4
            ZodiacAnimal = "Dragon"
         Case 7, -5
            ZodiacAnimal = "Rabbit"
         Case 6, -6
            ZodiacAnimal = "Tiger"
         Case 5, -7
            ZodiacAnimal = "Ox"
         Case 4, -8
            ZodiacAnimal = "Rat"
         Case 3, -9
            ZodiacAnimal = "Pig"
         Case 2, -10
            ZodiacAnimal = "Dog"
         Case 1, -11
            ZodiacAnimal = "Rooster"
         Case 0, -2
            ZodiacAnimal = "Monkey"
         Case 11, -1
            ZodiacAnimal = "Sheep"
         Case 12, 0
            ZodiacAnimal = "Horse"
      End Select
      txtInput.Text = "Your zodiac sign is " & ZodiacAnimal
      KeyAscii to 0
   End If
End Sub

さて、私が見る他のいくつかの問題。

  • ハードコーディングされた年があります。干支はあなたが生まれた年のことで、現在の年とは関係ありません。
  • 0 が 2 回リストされています。

さて、これはあなたにとっては高度すぎるかもしれませんが、私なら次のようにコーディングします。

Private Sub txtInput_KeyPress(KeyAscii As Integer)
   Dim ZodiacAnimal() As String
   If KeyAscii = 13 Then
      ZodiacAnimal = Split("Monkey,Rooster,Dog,Pig,Rat,Ox,Tiger,Rabbit,Dragon,Snake,Horse,Goat", ",")
      txtInput.Text = "Your zodiac sign is " & ZodiacAnimal(Y Mod 12) 
      KeyAscii to 0
   End If
End Sub

これにより、ZodiacAnimal が動物の配列になります。次に、Mod 関数を使用して、配列の正しいインデックスを取得します。

于 2013-06-21T15:35:54.547 に答える