问题1
使用JAVA代码实现,将完成后代码复制在HTML TAB下即可,不要使用其他语言!
【注意】
可支付用的账户不是给定case中的固定三个,可以支持任意多的账户;
能有面向对象的思维去解决问题;
核心逻辑是希望对给定的付款总金额和一批支付账户,给出本次付款使用哪些账户和对应每个账户的付款金额;
有良好的编码习惯;
有足够的测试用例;
【金额拆分】
假设有如下的付款场景:
给定本次付款总金额,从已有的账户中选择可支付金额足够的账户进行付款;
要求给出本次支付使用的账户和每个账号需要支付的金额;
case1:
输入:
付款金额:100
账号1剩余可支付金额: 80
账号2剩余可支付金额: 30
账号3剩余可支付金额: 20
输出:
账号1: 80
账号2: 20
case2:
输入:
付款金额:120
账号1剩余可支付金额: 80
账号2剩余可支付金额: 30
账号3剩余可支付金额: 20
输出:
账号1: 80
账号2: 30
账号2: 10
答案1
import java.util.Arrays;
import java.util.HashMap;
/**
* 大都督
* 2022/8/2 16:35
**/
public class Test {
public static void main(String[] args) {
Double totalAmount = 120d;
Double[] accounts = {80d, 30d, 20d};
System.out.println(test(totalAmount, accounts));
}
public static HashMap<String, Object> test(Double totalAmount, Double[] accounts) {
Double diff = totalAmount;
Arrays.sort(accounts, (o1, o2) -> o2.compareTo(o1));
HashMap<String, Object> result = new HashMap<>();
for (int i = 0; i < accounts.length; i++) {
if ((diff = diff - accounts[i]) > 0) {
result.put("账号" + (i + 1), accounts[i]);
} else if (diff == 0) {
break;
} else {
result.put("账号" + (i + 1), accounts[i] + diff);
break;
}
}
return result;
}
}