请求拆分电话账单计算器的税费、超量费计算方法并生成明细账单
电话账单计算器代码重构(方法拆分版)
下面是拆分后的完整代码,将计算逻辑拆分为独立方法,同时添加了明细账单打印功能:
import java.util.* fun main(args: Array<String>) { print("Enter the Total Minutes of Calls Made this Month: ") val scanner = Scanner(System.`in`) val totalMinutes = scanner.nextInt() // 调用拆分后的方法计算各项费用 val excessMinutes = calculateExcessMinutes(totalMinutes) val excessFee = calculateExcessFee(excessMinutes) val subtotal = calculateSubtotal(excessFee) val taxAmount = calculateTax(subtotal) val totalBill = calculateTotal(subtotal, taxAmount) // 打印明细账单 printBillDetails(totalMinutes, excessMinutes, excessFee, subtotal, taxAmount, totalBill) } // 计算超出套餐的分钟数(套餐包含60分钟) fun calculateExcessMinutes(totalMinutes: Int): Int { return maxOf(totalMinutes - 60, 0) } // 计算超量通话费用(每分钟0.25) fun calculateExcessFee(excessMinutes: Int): Double { return excessMinutes * 0.25 } // 计算账单小计(套餐基础费10元 + 超量费用) fun calculateSubtotal(excessFee: Double): Double { return 10.0 + excessFee } // 计算税费(小计的15%) fun calculateTax(subtotal: Double): Double { return subtotal * 0.15 } // 计算最终总额(小计 + 税费) fun calculateTotal(subtotal: Double, taxAmount: Double): Double { return subtotal + taxAmount } // 打印明细账单 fun printBillDetails( totalMinutes: Int, excessMinutes: Int, excessFee: Double, subtotal: Double, taxAmount: Double, totalBill: Double ) { println("\n=== 电话账单明细 ===") println("本月总通话时长: $totalMinutes 分钟") println("套餐包含时长: 60 分钟") println("超出套餐时长: $excessMinutes 分钟") println("超量通话费用: $%.2f".format(excessFee)) println("套餐基础费用: 10.00") println("账单小计: $%.2f".format(subtotal)) println("税费(15%): $%.2f".format(taxAmount)) println("最终账单总额: $%.2f".format(totalBill)) }
拆分说明
- 单一职责原则:每个方法只负责一项计算逻辑,比如
calculateExcessMinutes仅处理超量分钟数的计算,calculateTax仅处理税费计算,代码更易维护和测试。 - 可读性提升:通过方法名就能清晰理解每个步骤的功能,无需阅读具体实现逻辑。
- 明细账单:新增
printBillDetails方法,将各项费用明细逐一打印,用户能清晰看到费用构成。
内容的提问来源于stack exchange,提问作者C0pper
相关产品推荐
相关产品推荐

