2017-09-18 1 views
0

J'ai une exigence très simple. Actuellement dans mon programme, je fais quelque chose comme ça.Toute alternative à une instruction if-else donnée

int low=getLowValue(); 

if(low==20) 
    low=15; 
else 
    low=(low/5)*5; // here '/' is for integer division 

Y at-il un moyen simple de faire cela? Toute déclaration de ligne qui remplit la condition ci-dessus (pas l'opérateur ternaire). Merci d'avance.

+2

Vous vous rendez compte que '(low/5) * 5' est fondamentalement' low'. –

+4

Non pour low = 13 il deviendra 10 – yajiv

+0

bas == 20? bas = 15: faible = (faible/5) * 5; –

Répondre

-3

L'extrait de code donné est écrit en suivant les syntaxes Java pour résoudre le problème requis.

low = (low==20)?15:low; 
2

En fait, une opération ternaire est généralement idéale pour ce genre de chose.

Mais, puisque vous déclarez ne voulez pas, vous pouvez aussi le faire dans « un » (a) ligne en fournissant votre propre fonction pour faire le levage de charges lourdes:

int GetLowValueWithPreCheck(int checkFrom, int checkTo) { 
    int val = getLowValue(); 
    if (val == checkFrom) return checkTo; 
    return (val/5) * 5; 
} 

int low = getLowValueWithPreCheck(20, 15); 

(a) Citation car elle fait référence à une ligne au point d'appel - c'est généralement une bonne chose à faire si vous allez faire l'opération à plusieurs endroits et que vous voulez minimiser l'encombrement du code.

+1

Upvote juste pour '' 'une opération ternaire est idéale pour ce genre de chose'''. – sascha

0

Votre code est lisible et je ne le changerais pas. Mais si vous voulez vraiment, vous pouvez le faire (en C++ au moins):

low = (low - (low == 20))/5 * 5; 

Si low == 20 il en résulte (20 - 1)/5 * 5 qui évalue à 15. Si low != 20 ceci résulte en low/5 * 5.

+0

'low - (low == 20)' ne fonctionnera pas dans un langage à typage strict. – bfontaine