2009-05-27 6 views
3

J'essaye d'écrire une méthode de division, qui accepte 2 paramètres. Maintenant, si le diviseur est 0, nous ne pouvons pas diviser par zéro erreur, ce qui est correct.Valeur décimale Vérifier si zéro

Ce que je voudrais faire est de vérifier si le diviseur est 0 et si c'est le cas, le convertir en 1. Est-il possible de le faire sans avoir beaucoup d'instructions if dans ma méthode? Je pense que beaucoup de if() s fait du désordre. Je sais mathématiquement que cela ne devrait pas être fait, mais j'ai d'autres fonctionnalités pour cela.

Par exemple:

if(divisor == 0) 
{ 
    divisor = 1; 
} 
return dividend/divisor; 

Peut-il être fait sans la déclaration if()?

+1

Je suppose que c'est votre domaine de problème, mais considérez que votre code retournera un résultat très différent si le diviseur fait le changement mineur de 0.000001 à 0.0 –

+0

Je préfère votre code, que les instructions conditionnelles if. Beaucoup plus facile à lire !! Et c'est ce que je veux –

Répondre

15

Vous pouvez effectuer une instruction conditionnelle si comme ceci. C'est le même que IIF dans VB.net

return dividend/((divisor == 0) ? 1 : divisor); 

Assurez-vous que vous enveloppez votre deuxième moitié avec() ou vous obtiendrez une erreur de division.

+0

Vous n'avez pas besoin de deux séries de parenthèses? return dividend/(diviseur == 0? 1: diviseur); devrait faire l'affaire –

+0

Non, j'avais un ensemble supplémentaire que vous pouvez faire comme ceci: return dividend/(divisor == 0? 1: divisor); – CodeLikeBeaker

+0

Mais vous avez besoin du() enveloppant la valeur du résultat, sinon vous obtenez toujours la division par zéro erreur – CodeLikeBeaker

2

C'est à peu près la même chose qu'une instruction if, mais elle est plus propre.

return dividend/divisor == 0 ? 1 : divisor; 
+0

ce n'est pas plus propre qu'une instruction If –

11

En utilisant l'opérateur ?:

return (divisor == 0) ? dividend : dividend/divisor 
+2

+1 pour signaler qu'une division de 1 n'est pas nécessaire et renvoie simplement le divident. –

+0

Ce bon aussi, mais j'aime l'autre pour plus d'expansion. Je donne +1 pour votre aide. –

0

Vous pouvez créer votre propre type et surcharger l'opérateur/pour obtenir le comportement souhaité, si vous voulez vraiment. Implémentez les opérateurs de conversion implicites pour éviter la conversion ou la conversion de type.

Je ne pense pas que ce serait une bonne idée, cependant, car cela ajouterait un temps d'exécution; avec le seul avantage que vous obtenez un code qui (discutablement) semble un peu plus propre.

Questions connexes