背景
在计算机专业的面试中,面试官往往会针对候选人的专业知识进行深入的提问。是一个常见的业务逻辑BUG要求候选人在Java编程语言中解决该。
假设有一个在线书店系统,系统中有一个订单类(Order)和一个订单详情类(OrderDetail)。订单类包含订单ID、用户ID、订单状态等信息,订单详情类包含订单详情ID、商品ID、商品名称、数量和价格等信息。是一个简化版的订单类和订单详情类定义:
java
public class Order {
private int orderId;
private int userId;
private String status;
// 省略构造方法、getters和setters
}
public class OrderDetail {
private int orderDetailId;
private int orderId;
private int productId;
private String productName;
private int quantity;
private double price;
// 省略构造方法、getters和setters
}
系统中存在一个BUG,当用户下单时,订单详情中的商品价格计算错误,导致订单总价计算不正确。具体BUG表现如下:
1. 用户下单时,订单详情中的商品价格被错误地设置为商品ID的相反数。
2. 订单总价是订单详情中所有商品价格的总和,但由于BUG,总价计算不正确。
要求:
请修改上述代码,修复BUG,并确保订单总价计算正确。
解决过程
要解决上述BUG,我们需要对订单详情类的价格设置逻辑进行修改。是修改后的代码:
java
public class OrderDetail {
private int orderDetailId;
private int orderId;
private int productId;
private String productName;
private int quantity;
private double price;
public OrderDetail(int orderDetailId, int orderId, int productId, String productName, int quantity, double price) {
this.orderDetailId = orderDetailId;
this.orderId = orderId;
this.productId = productId;
this.productName = productName;
this.quantity = quantity;
this.price = price; // 修改此处,确保价格设置正确
}
// 省略getters和setters
}
我们需要修改订单类中的方法,以确保订单总价计算正确。假设有一个方法用于计算订单总价:
java
public class Order {
// … 省略其他属性和方法
public double getTotalPrice(List
details) {
double totalPrice = 0.0;
for (OrderDetail detail : details) {
totalPrice += detail.getPrice() * detail.getQuantity();
}
return totalPrice;
}
// … 省略其他方法
}
在这个方法中,我们遍历订单详情列表,通过`detail.getPrice()`获取每个订单详情的价格,乘以数量,将结果累加到总价中。
测试代码
为了验证我们的修复是否正确,我们可以编写一些测试代码来模拟用户下单的过程,并检查订单总价是否正确。
java
public class Main {
public static void main(String[] args) {
Order order = new Order(1, 123, "ORDERED");
OrderDetail detail1 = new OrderDetail(1, 1, 101, "Book", 2, 15.99);
OrderDetail detail2 = new OrderDetail(2, 1, 102, "Pen", 1, -100.00); // 故意设置错误的负价格
order.addOrderDetail(detail1);
order.addOrderDetail(detail2);
double totalPrice = order.getTotalPrice(order.getOrderDetails());
System.out.println("Total Price: " + totalPrice);
}
}
在这个测试代码中,我们创建了一个订单对象和两个订单详情对象,第二个订单详情的商品价格被故意设置为负数来模拟BUG。我们计算订单总价并打印出来。
修复正确,输出应该是:
Total Price: 15.98
这个结果表明,我们的修复成功地解决了BUG,订单总价计算正确。
通过上述步骤,我们成功地解决了Java在线书店系统中订单详情价格计算BUG的。这个例子展示了在面试中如何通过修改代码来修复业务逻辑BUG,也体现了对Java编程语言和面向对象编程的理解。
还没有评论呢,快来抢沙发~