只需要帮忙理解一下题目,告诉题目要干啥,再提供一个大致思路就行了
简单来说,就是为了解决不同币种之间的汇率问题,如果每个币种之间都存在汇率关系,这个问题就很简单,只需要创建两个币种的map即可,但是问题就在于存在两个币种之间不存在汇率关系,但是可以通过币种的转换来实现二者之间的汇率map,由于这个转换关系可以通过多种情况,这就是所谓的图,有多种途径达到汇率的转换。 基本思路是先实现它的基础版本,也就是假设所有币种都存在汇率关系进行编程,然后再其基础上添加汇率转换功能。
汇率兑换图,有向边上的权重是log(1/汇率),需要在图中找到最短的路径获得最高的汇率。题目要求实现四个功能,并自行构造测例
基础示例代码如下:
package HelpOther;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
/**
* 基础汇率换算应用
* 我们假设有四个币种,人民币:CNY 美元:USA 日元:YEN 韩元:KRW
* 其中 :
* CNY:USA=7:1
* CNY:YEN=1:100
* CNY:KRW=1:1000
* USA:YEN=1:500
* USA:KRW=1:200
* YEN:KRW=1:100
* 上面四个币种的的换算关系现在都知道了,我们首先根据前面的关系进行一个汇率换算的基础应用实现
*/
public class ExchangeRate {
public Map<String,Double> exchange;
/**
* 这里是初始化币种汇率的方法,一般来说是使用配置的方式进行读取载入的
* 这里只是为了演示
*/
public ExchangeRate(){
exchange=new HashMap<>();
exchange.put("CNY:USA",7.000);
exchange.put("CNY:YEN",0.010);
exchange.put("CNY:KRW",0.001);
exchange.put("USA:YEN",0.002);
exchange.put("USA:KRW",0.005);
exchange.put("YEN:KRW",0.010);
}
/**
* 汇率转换组件,根据入参ccy1和ccy2得到两个币种的汇率比ccy1:ccy2
* @param ccy1 第一个币种
* @param ccy2 第二个币种
* @return ccy1:ccy2
*/
public double Exchange(String ccy1,String ccy2){
double result=-1;
String exchangeStr1=ccy1+":"+ccy2;
String exchangeStr2=ccy2+":"+ccy1;
if(exchange.get(exchangeStr1)==null){
if(exchange.get(exchangeStr2)!=null){
result=1/exchange.get(exchangeStr2);
}else {
return -1;
}
}else{
result=exchange.get(exchangeStr1);
}
return result;
}
public static void main(String[] args) {
ExchangeRate exchangeRate=new ExchangeRate();
String ccy1=null;
String ccy2=null;
Scanner scanner=new Scanner(System.in);
System.out.println("欢迎进入汇率转换系统,首先请输入你的本币种:");
ccy1=scanner.nextLine();
System.out.println("请输入你的目标币种:");
ccy2=scanner.nextLine();
System.out.println(ccy1+":"+ccy2+"的汇率转换比为:");
System.out.println(exchangeRate.Exchange(ccy1,ccy2));
}
}