【发布时间】:2014-04-25 10:11:21
【问题描述】:
以下代码确实可以按我的需要工作,但它很丑陋、过度或其他一些问题。我查看了公式并尝试编写了一些解决方案,但最终得到了类似数量的语句。
在这种情况下,是否有一种数学公式对我有利,或者如果语句可以接受,是否有 16 种数学公式?
为了解释代码,这是一种基于同时回合的游戏。两个玩家每个有四个动作按钮,结果来自一个数组 (0-3),但是变量 'one' 和 'two ' 如果有帮助,可以分配任何内容。结果是,0 = 都不赢,1 = p1 赢,2 = p2 赢,3 = 都赢。
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;
}
【问题讨论】:
-
@waqaslam:- 这可以帮助Java switch statement to handle two variables?
-
这里肯定有一些可以概括而不是蛮力的逻辑吗?当然有一些函数
f(a, b)可以在一般情况下产生答案吗?您还没有解释计算的逻辑,因此所有答案都只是猪的口红。我将首先认真重新考虑您的程序逻辑,使用int标志进行操作非常过时。enums 可以包含逻辑并且是描述性的,这将允许您以更现代的方式编写代码。 -
阅读上面链接的替代问题中提供的@Steve Benett 答案后,我可以假设没有直接的公式答案,因为它与数据库基本相同。我试图在最初的问题中解释我正在制作一个简单的游戏(战斗机),用户可以选择 4 个按钮:blockHigh(0)、blockLow(1)、attackHigh(2) 和 attackLow(3)。这些数字保存在一个数组中,直到需要为止。稍后它们被函数 'fightMath()' 使用,该函数调用 playerOne 对 playerTwos 的选择以给出结果。没有实际的碰撞检测。
-
如果您有答案,请照此发布。 cmets 中的扩展讨论很难理解,尤其是在涉及代码时。如果你想讨论这个问题是否应该被迁移到 Code Review,有一个Meta 讨论。
-
“与数据库相同”是什么意思?如果这些值在数据库中,请从那里提取它们。否则,如果它真的这么复杂,我会像您拥有它一样保留它,并在每行之后添加业务逻辑 cmets,以便人们了解发生了什么。 (对我来说)长而明确更好——将来有人可以理解正在发生的事情。如果你把它放在一个地图中或者试着节省 8 行代码,好处真的很小,而缩减的空间更大:你会让那些有一天需要阅读你的代码的人越来越困惑。
标签: if-statement math formula