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



我只是想在android studio中创建这个小的android应用程序来转换货币。

我使用了2个Spinner对象来只保存3个值(美元、英镑、欧元(:

if(actualType.equals("USD")){
if(wantedType.equals("POUND")){
montantConv = montantNonConv * 0.87;
}
else if(wantedType.equals("EURO")){
montantConv = montantNonConv;
}
}
else if(actualType.equals("POUND")){
if(wantedType.equals("EURO")){
montantConv = montantNonConv * 1.15;
}
else if(wantedType.equals("USD")){
montantConv = montantNonConv * 1.15;
}
}
else if(actualType.equals("EURO")){
if(wantedType.equals("USD")){
montantConv = montantNonConv * 1;
}
else if(wantedType.equals("POUND")){
montantConv = montantNonConv * 0.87;
}
}

如果使用if-else,则代码对于仅3个选项(输入+输出(的组合来说太长。

我只是想知道有没有更好的算法可以做到这一点?有50多种货币可供选择的在线货币是如何做到的?

正如您所发现的,在转换逻辑中放入货币名称不是一个好主意。这同样适用于转换值。您应该希望编写代码来尽量减少类似的事情。您希望在不明确知道("硬编码"(货币名称或汇率的情况下对实际转换逻辑进行编码。

与其在代码中包含类似actualType.equals("POUND")的内容,不如尝试让代码中的每个值都由一个变量表示:actualType.equals(otherType)

在现实生活中,您的数据可能来自外部来源,例如文本文件、数据库或其他计算机。在您的小型演示应用程序中,您可能希望在程序启动时加载数据,并使用数组和/或Collection对象进行存储。此时,您还将使用相同的数据加载Spinner对象中的值。

你可能会考虑是否值得再上一节课:

class Money { 
String name;
double conversionValue;
Money (String name, double value) {
this.name = name;
conversionValue = value;
}

等等。(注意:我省略了可见性说明符。(

在你的转换应用程序中,你可以用一个数组模拟外部源:

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

创建另一个class来粘合货币和兑换因子的另一种选择是使用Map <String, Double>,以货币名称为键,兑换因子为值。

因此,转换应用程序可能有这样的方法:

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

public double convertMoney (Money selling, int sellingAmt, Money buying) { ... 

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

最新更新