java - 避免多个 if..elseif 语句

标签 java if-statement

我正在编写一个 Android 应用程序,它花费大量时间将纬度/经度解析为 UTM coordinates .我目前建立 UTM Zone 字母的代码是这样的

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';

虽然这很有效,但它似乎是一种非常低效的处理方式。我的大多数用户都在 U 区,这意味着在建立正确的区域字母之前,应用程序正在执行 16 次失败的 if..elseif 测试。

通过调整 if..elseifs 的顺序轻松设置正确?是的,但我不禁想到必须有一种更清洁的方法来做到这一点。我仍然是一个 Java 新手,所以尽管已经尝试过 HashMaps 等,但我没有取得太大进展。

是否有更优雅的方法?

最佳答案

  char Letter = "CDEFGHJKLMNPQRSTUVWX".charAt((int)((Lat + 80) / 8);

也许通过一些限制来确保 Lat 处于合适的范围内(另一种方法是抛出异常,因为 UTM 在该范围之外是未定义的):

  ClampedLat = Math.min(Math.max(Lat, -80), 84);

关于java - 避免多个 if..elseif 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38219796/

相关文章:

接受泛型类的java方法,创建该类的新实例并调用其方法

java - 我可以从子列表中检索开始和结束索引吗?

python - 制作不完整的 IF 语句

自时间戳以来经过的 Javascript 时间

在 c 中使用 #if 创建程序模式

java - 如何在没有 Eclipse 的情况下创建动态 Web 应用程序?

java - ViewPager PagerAdapter 不更新 View

java - Spring Boot + JPA + Hibernate CommandAcceptanceException : Error executing DDL

mysql - 如何在关注或取消关注之前检查用户是否正在关注另一个用户(附件)

if-statement - 在报表中使用数字或字母代码;用于 "if"语句中