2016-10-19 3 views
0

J'essaie de diviser deux nombres les uns par les autres mais aussi de ne pas laisser l'utilisateur entrer une division par zéro ou entrer des lettres et n'importe quoi d'autre que des nombres entiers. En ce moment je suis en train d'obtenir la division par zéro avec:Essayer de capturer des propositions de division par zéro et non entières dans un formulaire Windows VB, que faire?

Public Class Form2 
Dim answer As Double 
Private Sub btnDiv_Click(sender As Object, e As EventArgs) Handles btnDiv.Click 
    Dim num1 As Double 
    Dim num2 As Double 
    txtOne.Text = num1 
    txtTwo.Text = num2 
    If num2 = "0" Then 
     MessageBox.Show("Cannot Divide by Zero. Enter Another Integer.") 
    Else 
     lblDiv.Text = num1/num2 
    End If 


End Sub 
End Class 

Quelqu'un sait comment je devrais faire le tour de faire ceci ou si je suis au moins sur la bonne voie

+0

vous l'avez échangé. écrivez 'num1 = txtOne.Text' à la place. Faites-le aussi dans txtTwo.Text – someone

+0

S'il vous plaît soyez conscient de comparer un 'String' et un' Double'. Remarquez num2 = "0" '. 'num2' est un' Double', '" 0 "' est un 'String'. –

Répondre

0

Essayez d'utiliser Try Catch Exception pour ceci au lieu de l'affirmation if else.

+0

Comme ils l'ont toujours dit, _prevention vaut mieux que guérir_. Il est donc toujours préférable d'éviter qu'une exception ne se produise que de la laisser lancer une exception puis l'attraper. –

+1

@CrushSundae meh. Vous ne pouvez pas appuyer assez rapidement sur le bouton pour que cela ait un impact mesurable sur les performances de ce code. Aller avec ce que vous ressentez est plus expressif et précis dans ce cas. –

+0

@CrushSundae pour moi c'est la meilleure méthode si vous voulez juste attraper l'exception splitbyzero, si vous avez plusieurs conditions, alors l'instruction if-else sera meilleure. – GNMercado

1
Public Class Form2 

    Dim answer As Double 

    Private Sub btnDiv_Click(sender As Object, e As EventArgs) Handles btnDiv.Click 
     Dim num1 As Double = Double.Parse(txtOne.Text) 
     Dim num2 As Double = Double.Parse(txtTwo.Text) 

     Try  
      answer = num1/num2 
      lblDiv = answer.ToString() 
     Catch Ex As DivideByZeroException 
      MessageBox.Show("Cannot divide by zero. Enter another number.") 
     End Try 
    End Sub 

End Class 

ou

Public Class Form2 

    Dim answer As Double 

    Private Sub btnDiv_Click(sender As Object, e As EventArgs) Handles btnDiv.Click 
     Dim num1 As Double = Double.Parse(txtOne.Text) 
     Dim num2 As Double = Double.Parse(txtTwo.Text) 

     If num2 = 0 Then 
      MessageBox.Show("Cannot divide by zero. Enter another number.") 
     Else 
      answer = num1/num2 
      lblDiv = answer.ToString()    
     End If 
    End Sub 

End Class 

Une chose importante que j'ai vu dans votre code d'origine: être compatible avec votre utilisation de types! Vous créez les Double valeurs num1 et num2, mais essayez d'attribuer les diriger à partir d'une chaîne et essayer de comparer num2 avec une chaîne "0" alors que le message d'erreur les appelle tous Entiers.Il y a tellement de façons de créer une chaîne qui va analyser 0!

L'utilisateur vous donnera des chaînes à partir du clavier. Obtenez de là le type précis dont vous avez besoin le plus rapidement possible, et restez-y le plus longtemps possible jusqu'à ce que vous ayez à montrer à nouveau une chaîne à l'utilisateur.

+0

La division des valeurs 'Double' aboutira-t-elle toujours à' DivideByZeroException'? Mes tests limités dans VB.Net semblent indiquer que le résultat sera 'Infinity' ou' -Infinity' Si les types étaient 'Integer' ou' Decimal' alors une 'DivideByZeroException' résulterait. –