情景

产品来了新需求,做一个会员卡充值,可选充多少送多少,也可以输入其他任意金额并计算出送的金额。起初看这个需求还是比较简单的,实际在我做的时候,发现涉及到对算法的要求。

掉坑

服务端返回的充值方案的顺序是递增的(充值金额大的的排到最后),这好办了,输入的充值金额BigDecimal recharge循环从最后一个开始比较,当大于等于集合中的某个充值方案MemberRechargePlan rechargePlan的充值金额时 BigDecimal rechargeAmount,拿到赠送金额并且累加。并且输入的recharge要减去rechargeAmount,break跳出循环后,再进行递归的操作。最终得到应该赠送的金额。

提交测试,测试反馈两个问题:
1.充值方案集合中有相同的充值金额,应该选择最大的赠送金额。
2.输入999999这种大数字的充值金额程序闪退。

解决问题一

对相同充值金额的只保留最大的赠送金额的,其他排除。然后再用冒泡排序法升序排列。代码:

//排重+排序
private void doExDupAndSortList() {
//step1:排重,取最大赠送金额
for (int i = 0; i < listRechargePlan.size() - 1; i++) {for (int j = listRechargePlan.size() - 1; j > i; j--) {if (listRechargePlan.get(j).getRechargeAmount().compareTo(listRechargePlan.get(i).getRechargeAmount()) == 0) {if (listRechargePlan.get(j).getGiftAmount().compareTo(listRechargePlan.get(i).getGiftAmount()) != 1) {listRechargePlan.remove(j);} else {listRechargePlan.remove(i);}}}}
//step2:排序
for (int i = 1; i < listRechargePlan.size(); i++) {for (int j = 0; j < listRechargePlan.size() - i; j++) {if (listRechargePlan.get(j).getRechargeAmount().compareTo(listRechargePlan.get(j + 1).getRechargeAmount()) == 1) {MemberRechargePlan temp = listRechargePlan.get(j);listRechargePlan.set(j, listRechargePlan.get(j + 1));listRechargePlan.set(j + 1, temp);}}}
}

解决问题二

由于输入的充值金额过大,导致了多层递归嵌套,抛出 java.lang.stackoverflowerr堆栈溢出异常。解决方法就是减少递归,代码:

//计算赠送金额
private void countGiftMoney(BigDecimal recharge) {boolean haveRecharge = false;int size = listRechargePlan.size() - 1;for (int i = size; i >= 0; i--) {MemberRechargePlan plan = listRechargePlan.get(i);if (plan.getRechargeAmount().compareTo(recharge) != 1) {BigDecimal[] divide = recharge.divideAndRemainder(plan.getRechargeAmount());BigDecimal beishu = divide[0];//倍数//加上 赠送金额*倍数giftMoney = giftMoney.add(plan.getGiftAmount().multiply(beishu));//减去 充值金额*倍数recharge = recharge.subtract(plan.getRechargeAmount().multiply(beishu));haveRecharge = true;break;}}if (haveRecharge && recharge.compareTo(BigDecimal.ZERO) == 1) {countGiftMoney(recharge);//递归}
}

Android会员卡充值方案的实现相关推荐

  1. 蛋糕店会员卡充值方案有哪些?

    我们家是开蛋糕店的,最近推出了会员模式,但会员充值方案不知道怎么设置,所以请问一下蛋糕店会员卡充值方案有哪些呢? 其实操作的方法非常的简单,就是帮助蛋糕店设计了一个49元会员资格,涉及到一个49块钱的 ...

  2. APP(ios、Android)实现充值的方案

    APP(ios.Android)实现充值的方案 Android 安卓手机对于付费审核没有规则,可以做微信或支付宝的三方接口调用.也可以直接做银行卡充值. ios ios对于应用的充值功能有明确的限制, ...

  3. 会员卡充值软件系统多少钱一套?桶装水会员充值方案微信小程序开源源码开发制作

    龙兵科技,自主研发,源码交付,专注软件研发10年,各行业源码齐全,欢迎合作 今天有一个做桶装饮用水的客户来咨询我, 如何开展全员营销? 如何去做好顾客的转介绍和裂变? 如何去引爆客流量? 给他提供了一 ...

  4. 业务逻辑组件化android,AppJoint 极简 Android 组件化方案

    AppJoint 极简 Android 组件化方案.仅包含 3 个注解加 1 个 API,超低学习成本,支持渐进式组件化. 开始接入 在项目根目录的 build.gradle 文件中添加 AppJoi ...

  5. android热更新插件,与Android热更新方案Amigo的再次接触

    Amigo 作为一个"过气"的的热修复框架,用来学习和了解一下热修复的基本原理还是很好的.本文是本系列的第三篇. 前两篇: 与Android 热更新方案Amigo的初次接触 原作者 ...

  6. android屏幕适配教程,Android屏幕适配方案,android屏幕适配

    Android屏幕适配方案,android屏幕适配 文章转载禁止用于商业用途,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处莫高雷草原以及作者@JiongBull. Android屏幕适配方 ...

  7. android fota解决方案,Android智能终端FOTA方案的制作方法

    技术特征: 1.android智能终端fota方案发明专利权利要求 1.一种智能终端连续增量升级实现方法. 2.其特征在于所有任何终端设备可以一次性增量升级到最新版本,也可以对部分版本一次性增量升级到 ...

  8. 2021年最详细的Android屏幕适配方案汇总

    1 Android屏幕适配的度量单位和相关概念 建议在阅读本文章之前,可以先阅读快乐李同学写的文章<Android屏幕适配的度量单位和相关概念>,这篇文章包含了阅读本文的一些基础知识,推荐 ...

  9. 干货满满,Android热修复方案介绍

    摘要:在云栖社区技术直播中,阿里云客户端工程师李亚洲(毕言)从技术原理层面解析和比较了业界几大热修复方案,揭开了Qxxx方案.Instant Run以及阿里Sophix等热修复方案的神秘面纱,帮助大家 ...

最新文章

  1. 用c语言编程求主析取范式,求主析取范式.cpp · wangzhankun/C-Programming-Learn - Gitee.com...
  2. c程序隐藏linux,linux 下隐藏进程的一种方法
  3. bootstrap学习笔记(一)网络系统
  4. VMware 安装kali——linux
  5. java 迭代器失效_迭代器失效的几种情况
  6. SQL语句的解析过程
  7. Xstream-1 原理
  8. Android广播时间——实现强制下线功能
  9. Android Q共享音频输入
  10. 如何利用linux解除手机bl锁,小米手机解BL锁教程(小米手机详细图文详解解锁Bootloader教程)...
  11. R查看和更改工作路径的命令
  12. 半监督学习与直推式学习
  13. v4l2loopback 简介
  14. springboot--dubbo+nacos+LCN整合详解
  15. 在Octane中提升渲染速度的技巧(第2部分)
  16. Logstash:使用 mutate 过滤器
  17. createTrackbar滑条函数
  18. java clh_【Java并发编程实战】—– AQS(四):CLH同步队列
  19. 上海税务局网站 环境检测 可信任站点未设置问题
  20. Pytorch系列笔记(六)

热门文章

  1. 怎么解决系统内存占比过高【保姆级教学】
  2. 江南爱软装十大品牌 软装与硬装还是有区别的
  3. 一些server端知识合集
  4. 哪些人不适合做程序员?
  5. ODOO15如何简易查看产品历史交易价格和采购价格【免费分享OCA模块】
  6. dakai微信小程序 ios_ios版微信小程序跳一跳辅助
  7. DELL灵越5570换屏过程(仅供参考)
  8. python学习笔记:基本语法
  9. h5动画 php,用H5的canvas做恐怖动画
  10. 腾讯看点视频推荐索引构建方案