Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 避免多个if..elseif语句_Java_If Statement - Fatal编程技术网

Java 避免多个if..elseif语句

Java 避免多个if..elseif语句,java,if-statement,Java,If Statement,我正在编写一个Android应用程序,它花费大量的时间来解析经纬度。我目前建立UTM区域的代码如下 if (Lat<-72) Letter='C'; else if (Lat<-64) Letter='D'; else if (Lat<-56) Letter='E'; else if (Lat<-48) Letter='F'; else if (Lat<-40) Letter='G'; else if (Lat<-32) Letter='H'; else if

我正在编写一个Android应用程序,它花费大量的时间来解析经纬度。我目前建立UTM区域的代码如下

if (Lat<-72) Letter='C';
else if (Lat<-64) Letter='D';
else if (Lat<-56) Letter='E';
else if (Lat<-48) Letter='F';
else if (Lat<-40) Letter='G';
else if (Lat<-32) Letter='H';
else if (Lat<-24) Letter='J';
else if (Lat<-16) Letter='K';
else if (Lat<-8) Letter='L';
else if (Lat<0) Letter='M';
else if (Lat<8) Letter='N';
else if (Lat<16) Letter='P';
else if (Lat<24) Letter='Q';
else if (Lat<32) Letter='R';
else if (Lat<40) Letter='S';
else if (Lat<48) Letter='T';
else if (Lat<56) Letter='U';
else if (Lat<64) Letter='V';
else if (Lat<72) Letter='W';
else Letter='X';
if(纬度)
可能需要一些钳制,以确保
Lat
处于合适的范围内(另一种方法是引发异常,因为UTM未定义在此范围之外):

(代表问题作者发布答案)

为了让其他遇到这个问题的人受益:根据答案@AndyTurner,我最终做了以下工作:

public static char testIt(double lat)
{
 return "CCCDEFGHJKLMNPQRSTUVWXXX".charAt((int)(Math.ceil((lat + 90)/ 8)));
}
这里有一个解释:

  • 添加90可以确保我们处理的是一个很好的0-180范围,可以以一种更整洁的方式处理,并且可能比使用
    Math.min/max
  • 低于-72度时,区域字母始终为C,高于72度时,区域字母始终为X。我们不是通过加入
    if..
    测试来处理这些问题,而是根据需要,通过填充额外的Cs和X来人为地扩展区域字母的任一端范围

检查结果有效性的一个方便的图形参考是。我已经编写了自己的测试。

不要担心性能,除非您知道这是一个瓶颈,否则16个其他ifs与您的应用程序正在做的其他事情相比可能非常便宜。我会担心您的解决方案的可读性和可维护性。@AndyT厄纳提出了一个解决这两个问题的答案。不相关:java命名约定建议您用小写字母写变量名,以小写字母开头。您的编辑行为与原始代码不同。如果
lat
为-75,它将返回“X”而不是“C”。我不知道您想要的是哪一个,但它值得正在检查。我认为编辑永远不会返回“C”。@Holloway-我更正的代码处理了这个问题。
  ClampedLat = Math.min(Math.max(Lat, -80), 84);
public static char testIt(double lat)
{
 return "CCCDEFGHJKLMNPQRSTUVWXXX".charAt((int)(Math.ceil((lat + 90)/ 8)));
}