乔治爱啃脚趾 发表于 2023-11-25 07:38:34

面向对象的一道题

现需要编写一个简易快递计价程序。具体来说:

1、抽象快递类Express,其包含一个属性int weight表示快递重量(单位为kg),一个方法getWeight()用于返回快递重量和一个抽象方法getTotal()用于计算快递运费。

2、两个类继承Express,分别是:
(a)顺路快递SLExpress:计价规则为首重(1kg)12元,每增加1kg费用加2元。
(b)地地快递DDExpress:计价规则为首重(1kg)5元,每增加1kg费用加1元。

3、菜菜驿站类CaicaiStation,提供静态方法 int calculate(Express[] ex) 用于计算所有快递的费用。
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      int n = sc.nextInt();
      Express[] ex = new Express;
      for (int i = 0; i < ex.length; i++) {
            if (sc.next().equals("SL"))
                ex = new SLExpress(sc.nextInt());
            else
                ex = new DDExpress(sc.nextInt());
      }

      System.out.println(CaicaiStation.calculate(ex));
      sc.close();
    }
}
/* 请在这里填写答案 */

FishC_GPT 发表于 2023-11-25 07:38:50

在菜菜驿站类CaicaiStation中,我们需要提供一个静态方法int calculate(Express ex),用于计算所有快递的费用。可以按照以下步骤来实现:

1. 在Express类中,添加一个抽象方法getTotal(),用于计算快递运费。同时添加一个getWeight()方法,用于返回快递重量。

public abstract class Express {
    private int weight;

    public Express(int weight) {
      this.weight = weight;
    }

    public int getWeight() {
      return weight;
    }

    public abstract int getTotal();
}

2. 创建两个子类:SLExpress和DDExpress,分别继承Express类,并实现getTotal()方法。

public class SLExpress extends Express {
    public SLExpress(int weight) {
      super(weight);
    }

    @Override
    public int getTotal() {
      int weight = getWeight();
      int basePrice = 12; // 首重费用
      int additionalPrice = 2; // 每增加1kg的费用
      return basePrice + additionalPrice * (weight - 1);
    }
}

public class DDExpress extends Express {
    public DDExpress(int weight) {
      super(weight);
    }

    @Override
    public int getTotal() {
      int weight = getWeight();
      int basePrice = 5; // 首重费用
      int additionalPrice = 1; // 每增加1kg的费用
      return basePrice + additionalPrice * (weight - 1);
    }
}

3. 在CaicaiStation类中,实现静态方法calculate(Express ex),用于计算所有快递的费用。

public class CaicaiStation {
    public static int calculate(Express ex) {
      return ex.getTotal();
    }
}

4. 在Main类中,根据用户输入的快递信息,创建对应的SLExpress或DDExpress对象,并调用CaicaiStation.calculate()方法计算费用。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      int n = sc.nextInt();
      Express[] ex = new Express;
      
      for (int i = 0; i < n; i++) {
            if (sc.next().equals("SL")) {
                int weight = sc.nextInt();
                ex = new SLExpress(weight);
            } else {
                int weight = sc.nextInt();
                ex = new DDExpress(weight);
            }
      }

      for (int i = 0; i < n; i++) {
            System.out.println(CaicaiStation.calculate(ex));
      }

      sc.close();
    }
}

这样,就可以根据用户输入的快递信息计算出对应的运费了。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 面向对象的一道题