The following code does work how I need it to, but it's ugly, excessive or a number of other things. I've looked at formulas and attempted to write a few solutions, but I end up with a similar amount of statements.
Is there a type of math formula that would benefit me in this instance or are 16 if statements acceptable?
To explain the code, it's for a kind of simultaneous-turn-based game.. two players have four action buttons each and the results come from an array (0-3), but the variables 'one' & 'two' can be assigned anything if this helps. The result is, 0 = neither win, 1 = p1 wins, 2 = p2 wins, 3 = both win.
public int fightMath(int one, int two) {
if(one == 0 && two == 0) { result = 0; }
else if(one == 0 && two == 1) { result = 0; }
else if(one == 0 && two == 2) { result = 1; }
else if(one == 0 && two == 3) { result = 2; }
else if(one == 1 && two == 0) { result = 0; }
else if(one == 1 && two == 1) { result = 0; }
else if(one == 1 && two == 2) { result = 2; }
else if(one == 1 && two == 3) { result = 1; }
else if(one == 2 && two == 0) { result = 2; }
else if(one == 2 && two == 1) { result = 1; }
else if(one == 2 && two == 2) { result = 3; }
else if(one == 2 && two == 3) { result = 3; }
else if(one == 3 && two == 0) { result = 1; }
else if(one == 3 && two == 1) { result = 2; }
else if(one == 3 && two == 2) { result = 3; }
else if(one == 3 && two == 3) { result = 3; }
return result;
}
Instead do something like this
Try it with switch casing...
Take a look here or here for more info about it
You can add multiple conditions(not simultaneously) to it and even have a default option where no other cases have been satisfied.
PS: Only if one condition is to be satisfied..
If 2 conditions arise simultaneously.. I don't think switch can be used. But you can reduce your code here.
Java switch statement multiple cases
You may use a switch case instead of mutiple
if
Also to mention that since you have two variables then you have to merge the two variables to use them in switch
Check this Java switch statement to handle two variables?
As I draw a table between one/two and the result, I see one pattern,
The above would cut down atleast 3 if statements. I don't see a set pattern nor I am able to glean much from the code given - but if such logic can be derived, it would cut down a number of if statements.
Hope this helps.
The shortest and still readable solution:
or even shorter:
Doesn't contain any "magic" numbers ;) Hope it helps.
I'd use a Map, either a HashMap or a TreeMap
Especially if the parameters are not on the form
0 <= X < N
Like a set of random positive integers ..
Code