找回密码
 立即注册
搜索
热搜: Python Java C Html PHP
查看: 3|回复: 0

程序改错 购物车结账

[复制链接]

42

主题

10

回帖

8

积分

管理员

积分
8

原始用户

发表于 昨天 15:20 | 显示全部楼层 |阅读模式

试题3、根据题目描述,使用调试工具进行跟踪调试。

本题分值:45
考核时间:90分钟
考核方式:实操
考核内容:以下Java代码实现一个超市简单销售系统中的部分功能,顾客选择图书等物件 (Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价格进行结账。改正代码错误,运行程序。
  1. package ModifyB;
  2. // 修正:补全接口方法的返回值类型,规范方法定义
  3. interface Item {
  4.     void accept(Visitor visitor);
  5.     double getPrice(); // 修正:补充返回值类型double
  6. }

  7. // 修正:implement -> implements;补全visit方法的传参
  8. class Milk implements Item {
  9.     private double price;

  10.     public Milk(double price) {
  11.         this.price = price;
  12.     }

  13.     // 修正:accept方法中传入当前Milk对象给visitor的visit方法
  14.     @Override
  15.     public void accept(Visitor visitor) {
  16.         visitor.visit(this); // 把当前牛奶对象传给访问者
  17.     }

  18.     @Override
  19.     public double getPrice() {
  20.         return price;
  21.     }
  22. }

  23. // 修正:删除接口方法修饰符,参数补充类型和名称
  24. interface Visitor {
  25.     void visit(Milk milk); // 修正:去掉private,补充参数类型Milk
  26. }

  27. // 修正:implement -> implements;修正折扣逻辑(原逻辑写反)
  28. class Cashier implements Visitor {
  29.     private double totalForCart;

  30.     // 修正:折扣逻辑(原代码"<8"打原价,">=8"打9折,逻辑正确但注释描述反了)
  31.     @Override
  32.     public void visit(Milk milk) {
  33.         // 修正注释:牛奶价格≥8元打9折,否则原价
  34.         if (milk.getPrice() >= 8.0) {
  35.             totalForCart += milk.getPrice() * 0.9;
  36.         } else {
  37.             totalForCart += milk.getPrice();
  38.         }
  39.     }

  40.     public double getTotal() {
  41.         return totalForCart;
  42.     }
  43. }

  44. class ShoppingCart {
  45.     // 修正:补充ArrayList类的包名
  46.     private java.util.ArrayList<Item> items = new java.util.ArrayList<>();

  47.     public double calculatePrice() {
  48.         Cashier visitor = new Cashier();

  49.         // 修正:遍历商品时,调用accept并传入Cashier对象
  50.         for (Item item : items) {
  51.             item.accept(visitor); // 修正:传入visitor参数
  52.         }

  53.         // 修正:调用visitor的getTotal()方法获取总价
  54.         double total = visitor.getTotal();
  55.         return total;
  56.     }

  57.     public void add(Item e) {
  58.         items.add(e);
  59.     }
  60. }

  61. public class Modify2 {
  62.     public static void main(String[] args) {
  63.         // 测试:牛奶价格8.5元,应打9折,折后7.65元
  64.         Milk milk = new Milk(8.5);
  65.         ShoppingCart shop = new ShoppingCart();
  66.         shop.add(milk);
  67.         // 输出购物车计算的总价
  68.         System.out.println("购物车总价:" + shop.calculatePrice());

  69.         // 测试单独调用Cashier的visit方法
  70.         Cashier cash = new Cashier();
  71.         cash.visit(milk);
  72.         System.out.println("单独计算牛奶价格:" + cash.getTotal());
  73.     }
  74. }
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|HELIXABYSS

GMT+8, 2026-3-17 03:01 , Processed in 0.052192 second(s), 18 queries .

Powered by Discuz! X3.5

© 2024-2026 HELIXABYSS

快速回复 返回顶部 返回列表