2013-08-29 6 views
0

J'ai une logique métier compliquée et je crois que l'algèbre booléenne ce genre de choses devrait avoir la capacité de simplifier la logique. Quelqu'un peut-il me dire comment le faire en résolvant le problème suivant?Comment simplifier la déclaration conditionnelle compliquée par des connaissances mathématiques

Le problème vient d'un jeu X3: Réunion. Here is the universe map, si aide.

Dans l'univers il y a des secteurs liés entre eux par des portes de chaîne. Pour aller d'un secteur à l'autre, vous pouvez vous y rendre ou y sauter (ce qui est plus rapide). Si vous sautez dans un autre secteur, vous devez vous assurer qu'il n'y a pas trop de foule près de la porte Warp (sinon vous allez planter sur d'autres personnes). Vous devez avoir un appareil de saut et assez d'énergie pour sauter.

Il existe des secteurs isolés qui ne peuvent être atteints qu'en sautant. La question est de savoir comment un navire et son secteur de secteur et de destination actuel déterminent comment le navire devrait se rendre dans le secteur (en sautant ou en volant). De plus, si les deux secteurs sont adjacents, ne vous embêtez pas à sauter.

Let 'set:

a: two sectors are adjacent 
b: have jump device and enough energy 
c: destination sector is not isolated 
d: not too crowd near the gate of the destination 

if(!a && b && d) 
    jump now 
end 

if(!a && b && !d) 
    can jump but wait until there is not too crowd near the gate of the destination. 
    Should recheck before the jump, because the ship may be losing the energy 
    that makes it not enough to jump. 
end 

if(!b && c) 
    fly to destination 
end 

Pouvez-vous convertir les déclarations ci-dessus si fin à if-else si -... instruction else-end? Et j'aimerais savoir ce que signifie le "else" final. J'ai besoin non seulement du résultat mais aussi de la procédure qui approche le résultat.

Merci beaucoup!

Répondre

1

Vos 2 premières conditions reposent toutes deux sur! A & & b, et donc la différence entre elles est déterminée par la valeur de d. La dernière condition dépend juste de b & & c

Je ferais comme ça:

if (!b && c) { fly } 
else if (!a && b) { 
    if (d) { jump now } else { wait } 
} 

Ou vous pouvez baser sur 'b' abord:

if (b) { 
    if (!a) { 
     if (d) { jump now } else { wait } 
    } 
} 
else { 
    if (c) { fly } 
} 
Questions connexes