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

