如何在java中创建大规模货币转换算法

wz1wpwve  于 2022-09-18  发布在  Java
关注(0)|答案(1)|浏览(176)

我只是想在android studio中创建一个小型android应用程序来转换货币。
我使用了两个Spinner对象来仅保存3个值(美元、英镑、欧元):

  1. if(actualType.equals("USD")){
  2. if(wantedType.equals("POUND")){
  3. montantConv = montantNonConv * 0.87;
  4. }
  5. else if(wantedType.equals("EURO")){
  6. montantConv = montantNonConv;
  7. }
  8. }
  9. else if(actualType.equals("POUND")){
  10. if(wantedType.equals("EURO")){
  11. montantConv = montantNonConv * 1.15;
  12. }
  13. else if(wantedType.equals("USD")){
  14. montantConv = montantNonConv * 1.15;
  15. }
  16. }
  17. else if(actualType.equals("EURO")){
  18. if(wantedType.equals("USD")){
  19. montantConv = montantNonConv * 1;
  20. }
  21. else if(wantedType.equals("POUND")){
  22. montantConv = montantNonConv * 0.87;
  23. }
  24. }

使用if-else时,代码太长,无法组合3个选项(输入+输出)。
我只是想知道有没有更好的算法可以做到这一点?有50多种货币可供选择的在线货币是如何做到的?

vsmadaxz

vsmadaxz1#

正如您所发现的,在转换逻辑中输入货币名称不是一个好主意。这同样适用于转换值。您应该希望编写代码来最小化类似的事情。您希望对实际的转换逻辑进行编码,而不明确知道(“硬编码”)货币名称或汇率。
与其在代码中使用类似actualType.equals("POUND")的内容,不如尝试使用具有由变量actualType.equals(otherType)表示的每个值的代码。
在现实生活中,您的数据可能来自外部源,例如文本文件、数据库或其他计算机。在小型演示应用程序中,您可能希望在程序启动时加载数据,并使用数组和/或Collection对象存储数据。此时,您还将使用相同的数据加载Spinner对象中的值。
你可能会考虑是否值得再上一堂课:

  1. class Money {
  2. String name;
  3. double conversionValue;
  4. Money (String name, double value) {
  5. this.name = name;
  6. conversionValue = value;
  7. }

等等。(注意:我省略了可见性说明符。)
在转换应用程序中,您可以使用数组模拟外部源:

  1. Money [] market = { new Money ("Euro", 1.00), new Money ("USD", 1.00),
  2. new Money ("Pound", 1.15), new Money ("Yen", 0.007),
  3. new Money ("Rupee", 0.0125), ... };

创建另一个class以粘合货币和汇率因素的替代方法是使用Map <String, Double>,货币名称作为键,汇率因素作为值。
因此,转换应用程序可能有如下方法:

  1. public double convertMoney (String selling, int amt, String buying)
  2. { ...

根据名称和值的存储方式,它将使用字符串值查找2个转换值。汇率将是与selling相关的转换值除以与buying相关联的转换值。

展开查看全部

相关问题