You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手开发者求助:Cashback计算代码输出异常排查

Cashback计算代码输出异常排查求助

我是刚接触编程的学生,编写Cashback(现金返还)计算代码时出现输出错误。计算规则是:根据用户选择的消费类别(Petrol Spend、Groceries Spend、eWallet Transaction等),结合对应类别的消费金额,按比例计算奖励Cashback与合格消费Cashback的总和,若计算结果≥15则返回15。

以下是我的代码:

Cashback计算函数

private void function1() {
  double amountGet, cashback = 0;
  for (int i = 0; i< dataList.size(); i++) {
    if(dataList.get(i).getCategory() == "Petrol Spend") {
      amountGet = dataList.get(i).getAmount();
      cashback = amountGet * 0.08;
      if(cashback > 15) {
        cashback = 15.00;
      }
    } else if(dataList.get(i).getCategory() == "Groceries Spend") {
      amountGet = dataList.get(i).getAmount();
      cashback = (amountGet * 0.078) + (amountGet * 0.002);
      if(cashback > 15) {
        cashback = 15.00;
      }
    } else if(dataList.get(i).getCategory() == "eWallet Transaction") {
      amountGet = dataList.get(i).getAmount();
      cashback = (amountGet * 0.078) + (amountGet*0.002);
      if(cashback > 15) {
        cashback = 15.00;
      }
    } else if (dataList.get(i).getCategory() == "Other Eligible Spend") {
      amountGet = dataList.get(i).getAmount();
      cashback = amountGet * 0.002;
      if (cashback > 15) {
        cashback = 15.00;
      }
    }
    list.add(cashback);
  }
}

按钮调用逻辑

calculateBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
      calculateCashBack();
    }
 });
    
 private void calculateCashBack() {
   if (totalAmount >=2000) {
     function1();
   } else {
     function2();
   }
    
   for (int i =0; i< list.size(); i++) {
     Log.d(TAG, "Item with ID :" + dataList.get(i).getId() + "with the amount of : RM" + dataList.get(i).getAmount() + "get Cashback of : RM" + list.get(i));
   }
 }

当前输出存在异常,恳请协助排查问题。


排查要点

  1. 字符串比较错误:Java中==比较的是字符串对象的引用,而非内容。所有类别判断都应该改用equals()方法,比如将dataList.get(i).getCategory() == "Petrol Spend"改为"Petrol Spend".equals(dataList.get(i).getCategory())(用常量调用equals可避免空指针异常)。这是最可能导致计算逻辑失效、输出错误值的原因。
  2. 列表未清空:若多次点击计算按钮,list会持续追加新的计算结果,导致日志输出包含旧数据或重复条目。建议在调用function1()或function2()前,先执行list.clear()。
  3. function2实现缺失:代码中else分支调用了function2(),但未提供该函数的实现。如果function2()未正确处理cashback计算,也会引发输出异常。
  4. 浮点数精度问题:用double处理货币计算可能出现精度误差,建议改用BigDecimal类型来保证金额计算的准确性。

内容的提问来源于stack exchange,提问作者Rookie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 05:54:24