samedi 19 décembre 2020

How can I fix a method to calculate average of cash machine deposits for a Bank Class?

I have to test a class Bank. I have to check if when two cash machines are not empty, then the average of Bank is the sum of all deposists, (for cash machine 1 and 2) divided by the number of all deposists. I realised the mistake - the getAverageDeposit method in CLASS BANK gets Average of an Average, which I don't want. I want deposits 100,20 (cashmacine1) and 50(cashmachine2) to be added and divided my 3. Could you pls advise how can I fix this? I would appreciate your help, I am just learning.

These are methods in CLASS CASHMACHINE:

public double getAverageAtmsDeposit() {
        if (this.transactions.length == 0) {
            return 0;}

            int count = 0;
            double sum = 0;
            for (int i = 0; i < this.transactions.length; i++) {
                if (this.transactions[i] > 0) {
                    count++;
                    sum += this.transactions[i];
                }
            }
            return sum / (double) count;
        }

        public double getAverageAtmsWithdrawal () {
            if (this.transactions.length == 0) {
                return 0;}

            int count = 0;
            double sum = 0;
            for (int i = 0; i < this.transactions.length; i++) {
                if (this.transactions[i] < 0) {
                    count++;
                    sum += this.transactions[i];
                }
            }
            return sum / (double) count;
        }

AND THESE ARE METHODS IN CLASS BANK:

public double getAverageDeposit() {
       if (this.cashMachines.length == 0) {
           return 0;}

         int sum=0;
         for (int i = 0; i < this.cashMachines.length; i++){
             sum += this.cashMachines[i].getDepositCount();
         }
           return sum/ (double) this.cashMachines.length;
   }

    public double getAverageWithdrawal(){
        if (this.cashMachines.length == 0) {
            return 0;}

        double sum = 0;
        for (int i = 0; i < this.cashMachines.length; i++) {
            sum += this.cashMachines[i].getAverageAtmsWithdrawal();
        }
        return sum/ (double) this.cashMachines.length;
   }

TEST:

public void WhenTwoNonEmptyCashMachinesCreated_ThenTheAverageBankDepositAndWithdrawalAreTheSumOfAverageAtmsDepositsAndWithdrawals() {
       CashMachine[] cashMachines = new CashMachine[2];

       CashMachine cashMachine1 = new CashMachine();
       cashMachine1.addTransaction(100);
       cashMachine1.addTransaction(20);
       cashMachine1.addTransaction(-10);
       cashMachine1.addTransaction(-10);

       CashMachine cashMachine2 = new CashMachine();
       cashMachine2.addTransaction(50);
       cashMachine2.addTransaction(-30);

       cashMachines[0] = cashMachine1;
       cashMachines[1] = cashMachine2;

       Bank bank = new Bank(cashMachines);
       double avgDeposit = bank.getAverageDeposit();
       assertEquals(56.6, avgDeposit, 0.10);
       double avgWithdrawal = bank.getAverageWithdrawal();
       assertEquals(-16.6, avgWithdrawal,0.01);
   }

Aucun commentaire:

Enregistrer un commentaire