Java 从另一个对象创建的对象访问对象的方法

Java 从另一个对象创建的对象访问对象的方法,java,class,object,subclass,Java,Class,Object,Subclass,我有一个程序读取两个文件,一个文件用于创建帐户,另一个用于引用与每个帐户相关的内容,并提供用于计算成本的值 首先,第一个文件 创建国内或商业帐户 如果是国内的,则为帐户分配一个读取的计量编号 如果是商用的,则创建仪表对象数组 每个电表都有一个电表编号,可以有三种类型的电价峰值、非峰值、自定义 制定适当的关税 每个电价都有一个costkWh函数,返回一个成本 然后,第二个文件有一个表号列表、读取的电费以及读取的千瓦时数。在不同的电价类型下,每个电表编号可能出现多次 然后,我的问题变成了引用一个特定

我有一个程序读取两个文件,一个文件用于创建帐户,另一个用于引用与每个帐户相关的内容,并提供用于计算成本的值

首先,第一个文件

创建国内或商业帐户 如果是国内的,则为帐户分配一个读取的计量编号 如果是商用的,则创建仪表对象数组 每个电表都有一个电表编号,可以有三种类型的电价峰值、非峰值、自定义 制定适当的关税 每个电价都有一个costkWh函数,返回一个成本 然后,第二个文件有一个表号列表、读取的电费以及读取的千瓦时数。在不同的电价类型下,每个电表编号可能出现多次

然后,我的问题变成了引用一个特定的电表,以及它的电价类型和要计算的kWh值,并返回与每个电表相关的总成本

我一直在主班的基础上工作:

将第二个文件中的仪表读数加载并以某种方式存储

加载第一个文件,并通过访问??Account.MeterNumber[x].SOMETHING.Tariff[y].costv

其中,x是参考的计量编号,y是读取的电价,v是要计算的kWh值和该账户应付总额的输出

循环浏览所有帐户,然后打印带有应付总额的帐号列表

当试图以某种方式调用成本函数时,问题来了,我根本不知道如何从它的创建方式访问它,并且由于与一个电表关联的任何数量和类型的电费,不同电费类型的成本计算,每个电表的tarrif数组中的每个电费都是未知的电费类型

任何帮助都会很好,谢谢

片段:

Account,Main调用Account.load

public static Account load(Scanner sc) {
      if (sc.hasNextLine()) {
         AccountNumber accountNumber = AccountNumber.fromString(sc.nextLine());
         String kind = sc.next();
         sc.nextLine();
         
         if (kind.equals("D")) {
            return new DomesticAccount(sc, accountNumber);
         } else {
            return new CommercialAccount(sc, accountNumber);
         }
      } else {
         return null;
      }
   }
CommercialAccount和DomesticAccount是相同的,但只存储一个表编号,而不是一个表数组

public class CommercialAccount extends Account {

   private Meter[] meters;

   public CommercialAccount(Scanner sc, AccountNumber accountNumber) {
      this.accountNumber = accountNumber;
      int n = sc.nextInt();
      sc.nextLine();
      meters = new Meter[n];
      for (int i = 0; i < n; i++) {
         meters[i] = Meter.load(sc);
      }
   }
   

   public MeterNumber[] getMeterNumbers() {
      MeterNumber[] ms = new MeterNumber[meters.length];
      for (int i = 0; i < meters.length; i++) {
         ms[i] = meters[i].getMeterNumber();
      }
      return ms;
   }
}
合同塔里夫

public class ContractedTariff extends Tariff {
   
   private double r1, r2, r3, // rates in $/kWh
                  t1, t2;     // thresholds in kWh
   
   public static ContractedTariff load(Scanner sc) {
      ContractedTariff ct = new ContractedTariff(sc.nextDouble(), sc.nextDouble(),
         sc.nextDouble(), sc.nextDouble(), sc.nextDouble());
      sc.nextLine();
      return ct;
   }
   
   public double cost(double kWh) {
      return 666.0; // placeholder
   }

}
在PeakTariff中,PeakTariff本质上是相同的

public class OffPeakTariff extends Tariff {
   
   public static final double RATE = 0.1543; // $/kWh
   
   // only one instance is required.
   public static final OffPeakTariff OFF_PEAK_TARIFF = new OffPeakTariff();
   
   public double cost(double kWh) {
      return 666.0;  // placeholder
   }   

}

请给出一些代码,这样更容易帮助。不用担心,我已经添加了我认为解决这个问题所必需的所有代码,抱歉,如果我违反了一系列关于如何提问的规则,这里有点新,我不理解你的问题,从一个帐户开始,迭代它的计量表,迭代它们的费率,每一个的呼叫成本和金额;这就是问题所在吗?这是一项任务,因此操作顺序和实现方式很重要。Main创建帐户,创建电表,电表创建电费。Main还需要在创建后读取一个账户,并查看其电表,参考电表的千瓦时使用水平和每个电表的每个电价,然后将账户所有电表的成本结果相加,并打印一个带有支付成本的账号列表。我真正遇到的唯一问题是如何从Main调用每个帐户电表电费的成本函数?谢谢
public class ContractedTariff extends Tariff {
   
   private double r1, r2, r3, // rates in $/kWh
                  t1, t2;     // thresholds in kWh
   
   public static ContractedTariff load(Scanner sc) {
      ContractedTariff ct = new ContractedTariff(sc.nextDouble(), sc.nextDouble(),
         sc.nextDouble(), sc.nextDouble(), sc.nextDouble());
      sc.nextLine();
      return ct;
   }
   
   public double cost(double kWh) {
      return 666.0; // placeholder
   }

}
public class OffPeakTariff extends Tariff {
   
   public static final double RATE = 0.1543; // $/kWh
   
   // only one instance is required.
   public static final OffPeakTariff OFF_PEAK_TARIFF = new OffPeakTariff();
   
   public double cost(double kWh) {
      return 666.0;  // placeholder
   }   

}