java - 没有 "if-else"或 "switch-case"的公制转换算法

标签 java algorithm

我想编写一个可以将一个单位转换为另一个单位的程序。假设我有两种方法。第一种方法可以进行公制转换,第二种方法可以进行重量转换。例如;

1. long km=metricConvLength(long mil,Enum.mil,Enum.km);//第一种方法

2. long agirlik=metricConvWeight(long kg,Enum.mil,Enum.km);//第二种方法

我想为这些变量使用Enum 结构。 我的程序可以转换这些东西和对立面;

  • 海里公里
  • 海里-海里
  • 英尺-公里
  • 英尺-密尔
  • 磅-公斤
  • ons-gr
  • 公司 - 厘米
  • 码 - 米
  • 节公里

我的问题:我不想使用 if-elseswitch-case 结构进行转换。(因为如果我使用if-else 结构,我的代码看起来很糟糕,非常容易和缓慢。如果我使用这些结构,我需要超过 50 个 if-else 结构。这很麻烦。)

我能否在不使用 if-else 或 switch-case 的情况下为这些转换编写算法。 我的目的是更少的代码,更多的工作。关于算法有什么技巧吗?

最佳答案

您不需要 if-then-else - 事实上,您的程序中不需要控制语句。您所需要的只是一个查找表 - 一个 Map,它将您的单位枚举转换为 double 转换因子,以便将单位度量乘以您获得米的转换因子空间单位和重量单位公斤。相反,将米除以该系数即可得到所需的单位。

有了这张 map ,您可以对所有单位对进行转换:

  • 查找源单位的转换系数Cs
  • 查找目标单位的转换系数 Cd
  • 返回 value * Cs/Cd 作为结果。

例如,假设您要处理米、码、英寸和英尺。您的 map 将如下所示:

  • 米 - 1.0
  • y - 0.9144
  • 在 - 0.0254
  • 英尺 - 0.3048

现在假设您要将 7.5 码转换为英尺:

  • 查找 Cs = 0.9144
  • 查找 Cd = 0.3048
  • 计算并返回 Res = 7.5 * 0.9144/0.3048 = 22.5

关于java - 没有 "if-else"或 "switch-case"的公制转换算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17548187/

相关文章:

c++ - 计算成本

c++ - 类型类型转换差异

algorithm - 跟踪字符串中特定字符的索引的最有效方法是什么?

algorithm - 查找数组中总和小于或等于给定总和的所有三元组

java - 重写 JLabel 中的 setText() 方法

java - 表格中的单元格之间是否总是存在自然的 "space"?

java - Java 文件读取有什么问题?

任何语言都需要的算法 - 与数组相关

java - 公共(public)与私有(private)

javascript - 如何读取网页中变量的值?