2015-07-10 164 views
0

我目前正在做一個項目,並試圖做出自己的數學測驗。基本上,我有3個標籤和一個文本框。在第一個和第三個標籤中隨機生成一個數字。在第二個標籤中,選擇一個數學運算符(+, - 或÷)。在文本框中,用戶將輸入一個等式的答案,這就給我帶來了我想問的問題:VB - 數學測驗檢查答案

我可以做到一切都很好,但我無法繞過代碼這將檢查輸入到文本框中的答案是否正確。

我已經試過......

If lbloperator.Text = "+" & txtsum.Text =num1 + num2 Then 
     msgbox("CORRECT") 
    End If 

,但它不工作。

最後,我想用計數器替換msgbox以計算在測驗持續時間內獲得的正確答案的數量。我也嘗試過其他的東西,已經越來越錯誤:

Conversion from string "" to type 'Double' is not valid.

如果有幫助,一個按鈕到位,以隨機的操作並在標籤數量和檢查,如果答案是正確的。

謝謝

+0

你的代碼的問題是你使用'&'這是一個連接運算符。它會將兩個字符串拼接成一個,而不是檢查它們。使用'AndAlso':'If lbloperator.Text =「+」AndAlso txtsum.Text = CStr(num1 + num2)' –

+0

非常感謝Visual Vincent,這似乎解決了它無法工作。 –

回答

2

也許這會有所幫助。

鑑於這些功能:

Dim dictionary = New Dictionary(Of String, Func(Of Double, Double, Double))() _ 
     From _ 
     { _ 
      {"+", Function(x, y) x + y}, _ 
      {"-", Function(x, y) x - y}, _ 
      {"*", Function(x, y) x * y}, _ 
      {"/", Function(x, y) x/y} _ 
     } 

    Dim process As Func(Of String, String, String, Double) = _ 
     Function(op, x, y) _ 
      dictionary(op)(Double.Parse(x), Double.Parse(y)) 

你現在可以做的事:

Dim operator = TextBox1.Text ' "+" 
    Dim num1 = TextBox2.Text ' "5" 
    Dim num2 = TextBox3.Text ' "4" 
    Dim result = process(operator, num1, num2) ' 9 

請讓我知道如果這有助於我怎麼可以擴大到把你帶到任何你需要去。

+1

我喜歡這樣 - 比我在下面的答案中拼湊出來的那種更清潔的解決方案。加上1。 –

+0

你能指導我到哪裏我可以學習你使用的命令。我不明白髮送的代碼的頂部的一件事,爲我的無知道歉,我絕對會將自己歸類爲初學者。 –

+0

你需要查找的兩件事是'Dictionary '和匿名函數。 – Enigmativity

0

我建議你使用select語句,例如嘗試這樣的事情;假定四個文本框位於第一個數字的下方,第二個爲運算符,第三個爲第二個數字,最後爲結果。轉換爲十進制允許用戶輸入類似2,5的內容,否則,事實上他們可能無法輸入正確的操作符。

 Dim correctResults As Integer 


    Private Sub CheckResult() 
     Dim num1 As Decimal = CDec(textBox1.text) 
     Dim num2 As Decimal = CDec(TextBox3.Text) 
     Dim operator as String = TextBox2.Text 
     Dim result As Decimal = CDec(TextBox4.text) 

Select Case operator 

      Case "+" 

       If result = num1 + num2 Then 
        correctResults += 1 
       End If 
      Case "-" 
       If result = num1 - num2 Then 
        correctResults += 1 
       End If 


      Case "*" 

       If result = num1 * num2 Then 
        correctResults += 1 
       End If 

      Case "/" 

       If result = num1/num2 Then 
        correctResults += 1 
       End If 

      Case Else 

       Exit Sub 


     End Select 
    End Sub