我遇到了这个问题,OP想要改进下面的if块。我把这作为一个新问题来回答,因为我正在寻找这类问题的更一般的解决方案。
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 = 2; }
else if(one == 3 && two == 1) { result = 1; }
else if(one == 3 && two == 2) { result = 3; }
else if(one == 3 && two == 3) { result = 3; }
return result;
}
现在有n^k
获得结果的可能性,其中n=2和k=4
。一些答案建议使用多数组作为表来减少if-丛林。
但是我想知道如何用大n和k来解决这样的问题?因为使用if、switch和建议的数组方法的解决方案无法很好地扩展,因此应避免在代码中键入类似的内容。
如果我考虑组合问题,必须有一种方法来轻松评估它们。
我想知道如何用大n和k来解决这样一个问题。
由于输出是任意确定的(游戏设计者的奇思妙想)而不是数学确定的(公式),因此不能保证任何模式。因此,唯一的通用解决方案是某种查找表。
本质上,这个问题类似于要求一个执行f(a,b)的程序-
就我个人而言,我认为更清楚的做法是更改逻辑以按意图操作(因此阅读代码可以解释攻击是如何工作的),而不是实际结果(列举输入和匹配输出的列表)。不要构建if丛林或查找表,而是根据逻辑的工作方式来构造代码。JAB基于枚举的解决方案明确表达了战斗逻辑,这使得更容易看到在哪里添加新功能,更容易看到错误(查找表中的逐个错误在检查时并不明显是错误的)。查找表可能是一种优化,但只有在探查器这么说的情况下才有必要。
有两种方法可以解决这个问题:
>
基于数据。例如,您可以创建一个哈希映射,将这对值映射到结果。
class Pair {
int one, two;
//Generate hashcode and equals
}
Map<Pair, Integer> counts = new HashMap<>();
基于模式。确定可用于确定新值的规则/公式。
这显然更好,但依赖于能够确定涵盖所有情况的规则。
这只是一个数据表。问题的答案由多个键找到。这与返回数据库表中的一些数据没有什么不同,数据库表本身可能很大,可能跨越多个表。
使用Weka对鲍鱼数据集进行ANN和KNN。 ANN正确分类实例的结果3183 76.203%错误分类实例994 23.797%平均绝对误差0.214均方根误差0.3349相对绝对误差58.6486% KNN结果|正确分类实例3211 76.8734%错误分类实例966 23.1266%平均绝对误差0.2142均方根误差0.3361相对绝对误差58.7113% KNN具有较高的精度,而ANN具有较
我正在(用Java)研究递归图像处理算法,该算法从中心点向外递归遍历图像的像素。 不幸的是,这会导致堆栈溢出。所以我决定切换到基于队列的算法。 现在,这一切都很好,但是考虑到它的队列将在很短的时间内分析数千个像素,同时不断弹出和推送,而不保持可预测的状态(长度可能在100到20000之间),队列实现需要具有显著的快速弹出和推送能力。 链表似乎很有吸引力,因为它能够将元素推到自己身上,而无需重新排列
问题内容: 我正在尝试以下代码,该代码向RDD中的每一行添加一个数字,并使用PySpark返回RDD列表。 输入文件(sample.txt)中的内容为: 我期待这样的输出(将rdd中的数字分别添加0、1、2): 而实际输出是: 这意味着无论 范围(4) 为何,该理解仅将值3用于变量i 。 为什么会发生这种现象? 问题答案: 它的发生是由于Python的后期绑定,而不是特定于(Py)Spark的。将
引子 Rax 提供的长列表标签有很多,在什么场景下使用什么列表组件,怎样选择列表组件性能会更好,这些问题可能会给刚接触 Rax 的同学带来困扰。本文结合 Rax 0.5 发布版本对列表能力进行一次详细的梳理。 如何让页面滚动 在开始正题之前先说说为什么要有长列表的概念,以及如何让页面可以滚动。 传统的 Web 页面天生在浏览器里就是可以滚动的,我们额外引入一个滚动容器的概念好像比较多余。但当我们做
问题内容: 我需要为某些对象实现JSON序列化,并且在与通用集合进行集成时遇到了一个问题。 所有可序列化的类都实现此接口(JSONObject来自此库): 我基于java.util.list的集合的代码大致如下所示: 我的问题是:当我从JSONObject加载AwesomeList时,我需要创建其元素,但是这是不可能的,因为Java禁止我写 我应该如何修改此任务的方法? 问题答案: 您是否绑定到该
我正在编写一段代码,对给定的后缀表达式求值。每个操作数和运算符之间用空格分隔,最后一个运算符后跟空格和“x”。 例子: 内插表达式:(2*3 4)*(4*3 2) 后缀表达式:23*443*2*x “x”暗示表达的结束。 输入(后缀表达式)作为字符串由另一个函数给出,该函数将内缀表达式转换为后缀表达式。 后缀评估的功能是: 我给出的例子的输出应该是“140”,但我得到的是“6”。请帮我找出错误。