在大多数情况下,这很好,尽管要使其优化和(IMO)更加清洁,您可以做的是找到一个将输入标题与地图中使用的标题相关联的函数。
例如:(我很确定这是正确的,但是您需要检查一下)
45* (int)Math.round(( ((double)x % 360) / 45))
首先
x % 360,要确保标题在有效范围内。然后
45 * round(.../45)
查找最接近的45的倍数。
现在将地图更改为
HashMap<Integer, String> map = new HashMap<Integer, String>() map.put(0, "North") map.put(45, "Northeast") etc...
因此,现在您的算法成为一种快速的数学计算,而不是遍历整个地图。此外,这里不需要Hashtable,因为它提供了并发构造(如果我没记错的话),并且在您的情况下,这实际上会导致性能下降。
同样,对于您的需求,性能影响可能完全可以忽略不计。
编辑Thilo和shinjin的建议:
不用乘以45,只需保留方程式的其余部分,即为您提供0-7的值,并创建一个字符串数组。
String directions[] = {"N", "NE", "E", "SE", "S", "SW", "W", "NW"}return directions[ (int)Math.round(( ((double)x % 360) / 45)) % 8 ]并且您的问题已经两行解决了。
注意事项:负数不能正确使用模量。如果我们的输入标题为负,则需要首先使其为正。



