3 чековых счета 2 конструктора для cust без овердрафта, но тот, кто не хочет овердрафта, получает один - PullRequest
0 голосов
/ 05 июля 2019

Класс ChequeAccount расширяет класс Account.Класс учетной записи содержит ID, имя и атрибуты баланса.Класс ChequesAccount имеет overdraftLimit, amtOverdrawn и транзакцииNo плюс супер (ID, имя, баланс) со счета.Я создал 3 объекта chqAccount в массиве и распечатал их детали.Ринго отказался от использования овердрафта в своем аккаунте на chq, поэтому для него это отдельный конструктор.Однако, когда я печатаю детали для всех чековых счетов, он единственный, кто получает возможность овердрафта.Это делает мою голову, пожалуйста, помогите

public class TestAccounts6
{
   private static ChequeAccount[] chqAccount = new ChequeAccount[5];
   private static int indexNo = 0;

   public static void main(String[] args)
   {
      ChequeAccount c1 = new ChequeAccount("S1111", "Paul", 1245.00, 0, 0, 0);
      ChequeAccount c2 = new ChequeAccount("S2222", "Ringo", 2500.00);
      ChequeAccount c3 = new ChequeAccount("S3333", "John", 1575.00, 0, 0, 0);
      chqAccount[0] = c1;
      chqAccount[1] = c2;
      chqAccount[2] = c3;
      indexNo = 3;
      System.out.printf("%-10s%-10s%-10s%-10s%-10s%-10s%n", "ID", "Name", "Balance",
                        "Overdraft", "Amount", "No of");
      System.out.printf("%-10s%-10s%-10s%-10s%-10s%-10s%n", "", "", "",
                        "Limit", "Overdrawn", "Transactions\n");
      for (int i = 0; i < indexNo; i++)
      {
         chqAccount[i].print();
      }

   }

}
public class ChequeAccount extends Account
{
   protected double overdraftLimit = 10000;
   protected double amtOverdrawn = 0;
   protected int transactionNo = 0;

   // constructor
   public ChequeAccount(String ID, String name, double balance,
                        double overdraftLimit, double amtOverdrawn,
                        int transactionNo)
   {
      super(ID, name, balance);
      this.overdraftLimit = overdraftLimit;
      this.amtOverdrawn = amtOverdrawn;
      this.transactionNo = transactionNo;
   }

   public ChequeAccount(String ID, String name, double balance)
   {
      super(ID, name, balance);
   }

   public void print()
   {

      System.out.printf("%-10s%-10s$%-9.2f$%-9.2f$%-9.2f%-10d%n", ID, name,
                        balance, overdraftLimit, amtOverdrawn, transactionNo);
   }

}
public class Account
{
   protected String ID;
   protected String name;
   protected double balance;

   // Constructor
   public Account(String ID, String name, double balance)
   {
      this.ID = ID;
      this.name = name;
      this.balance = balance;
   }

Ожидаемый Ринго не получит возможность овердрафта, а Джон и Пол получат.Вопреки ожиданиям

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Это ожидаемое поведение кода.

public class ChequeAccount extends Account
{
   protected double overdraftLimit = 10000;
   protected double amtOverdrawn = 0;
   protected int transactionNo = 0;
   ...
}

Вы присвоили значения по умолчанию для этих переменных.Когда вы вызываете конструктор для Ringo , тогда эти переменные не обновляются, в результате будут использованы значения, которые вы присвоили по умолчанию.

С Пол и Джон вы присваиваете этим переменным новые значения (все 0), чтобы они вместо этого были распечатаны.

ChequeAccount c1 = new ChequeAccount("S1111", "Paul", 1245.00, 10000, 0, 0);
ChequeAccount c2 = new ChequeAccount("S2222", "Ringo", 2500.00);
ChequeAccount c3 = new ChequeAccount("S3333", "John", 1575.00, 10000, 0, 0); 
public class ChequeAccount extends Account
{
   protected double overdraftLimit = 0;
   protected double amtOverdrawn = 0;
   protected int transactionNo = 0;
   ...
}

Изменение кода с указанными выше изменениями теперь будет отображать овердрафтпредел больше нуля для Пола и Джона при создании Ринго лимита 0.

0 голосов
/ 05 июля 2019

ведет себя правильно. Потому что

  1. вы создали 3 объекта chqAccount

ChequeAccount c1 = новый ChequeAccount ("S1111", "Paul", 1245.00, 0, 0, 0);

ChequeAccount c2 = новый ChequeAccount ("S2222", "Ringo", 2500.00);

ChequeAccount c3 = новый ChequeAccount ("S3333", "John", 1575.00, 0, 0, 0);

  1. при попытке напечатать значения этого объекта. он печатается следующим образом.

ID Имя Баланс Овердрафт Сумма №
Лимитные транзакции

S1111 Пол $ 1245,00 $ 0,00 $ 0,00 0 S2222
Ринго $ 2500,00 $ 10000,00 $ 0,00 0 S3333 Джон
$ 1575,00 $ 0,00 $ 0,00 0

когда мы соблюдаем вышесказанное и проверяем данные Ринго. Баланс: 10000,00 долл. США, поскольку вы не присвоили значения Ринго. Но в ChequeAccount, как показано ниже.

  protected double overdraftLimit = 10000;
  protected double amtOverdrawn = 0;
  protected int transactionNo = 0;

имеет значение по умолчанию. так что при печати он принимает значения по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...