Object Oriented Java: внешний вызов метода со ссылкой на переменную - PullRequest
0 голосов
/ 23 февраля 2020

Использование BlueJ в качестве компилятора для изучения внешних вызовов / ссылок на методы. Моя цель - узнать больше о вызове методов из другого класса и о том, как ссылаться на переменные из этого класса.

Что я понимаю, так это то, что внешний вызов метода по сути такой:

object.methodName(parameters);

Текущий проект, над которым я работаю, просит меня go через ArrayList и извлеките остаток по всем счетам в списке. Я работаю только с двумя классами. Bank.class и BankAccount.class В BankAccount.class у меня 4 метода; withdraw(), deposit(), showBal() и acctInfo(). Для банка у меня есть только два метода, listAllAccounts() и sumAllAccounts().

Я застрял при написании кода для sumAllAccounts(), поскольку он просит меня суммировать баланс всех BankAccount.class объектов, которые добавляются к private ArrayList<BankAccount> accounts

Мне не нужно прямой ответ, я здесь только потому, что исчерпал свои ресурсы. В моем курсе мы не обсуждали static classes или null, поэтому многие подобные сообщения мне трудно понять.

В другом месте я читал, что невозможно перенести переменную экземпляра из одного класса в другой. Поэтому мне любопытно, как я должен извлечь переменную типа float в другой класс для вычисления.

На данный момент я написал следующее:

private void sumAllAccounts()
{
   int index = 0;
   float bal = 0;
   float sum = 0;
   while(index < accounts.size()) {
      accounts.get(index);
      bal = XXXXXXXXXXXXXXXXXXXXXXXXX
      sum = sum+bal;
      index++;
   }
   System.out.println("The total balance of all accounts listed are: " + sum);
}

Я знаю, что баланс должен посмотреть на индексированный объект в этот момент и извлечь баланс, который мы можем добавить к сумме. Я не знаю, как извлечь этот баланс. Еще раз, это всего лишь пример, над которым я работаю, чтобы лучше объяснить себя. Контекст вашего ответа может быть менее конкретным c.

Ответы [ 3 ]

0 голосов
/ 23 февраля 2020

Итак, у вас есть метод с именем showBal() в вашем классе Bankaccount, и предполагается, что он возвращает число с плавающей запятой:

// first get() the account that you are working on
BankAccount currentAccount = account.get(i);

// then invoke the method to retrieve the balance
bal = currentAccount.showBal();

Вы должны также использовать for-l oop вместо while-l oop:

float bal = 0;
float sum = 0;

for (int index = 0; index < account.size(); index++){

   BankAccount currentAccount = account.get(i);
   bal = currentAccount.showBal();
   sum += bal; // "sum += bal;" is a shorter way of coding "sum = sum + bal;"

}

System.out.println("The total balance of all accounts listed are: " + sum);

Таким образом, вам не нужно объявлять индексное целое число и использовать индекс ++. Это все включено в for-l oop!

0 голосов
/ 23 февраля 2020
int index = 0;
while(index < accounts.size()) {
    sum += accounts.get(index).showBal();
    index++;
}

Хотя, когда размер списка фиксирован, я предпочитаю использовать для l oop:

for(int i = 0; i < accounts.size(); i++) {
    sum += accounts.get(i).showBal();
}

или для каждого :

for(BankAccount bankAccount : accounts) {
    sum += bankAccount.showBal();
}

Как только вы поймете циклы, вы также можете попытаться сделать это с помощью Lambdas, что более элегантно:

float sum = accounts.stream().reduce(0.0, (subtotal, element) -> subtotal + element.showBal());
0 голосов
/ 23 февраля 2020

Предполагая, что showBal() в классе BankAccount возвращает float:

public void sumAllAccounts() {
    float sum1 = 0;
    for(BankAccount bankAccount : accounts) {
        sum1 += bankAccount.showBal();
    }
    System.out.println("The total balance of all accounts listed are: " + sum1);

    // or
    int index = 0;
    float bal = 0;
    float sum2 = 0;
    while(index < accounts.size()) {
        bal = accounts.get(index).showBal();
        sum2 = sum2 + bal; // can be simplified to: sum2 += accounts.get(index).showBalance();
        index++;
    }
    System.out.println("The total balance of all accounts listed are: " + sum2);

    // or
    float sum3 = 0;
    for(int i = 0; i < accounts.size(); i++) {
        sum3 += accounts.get(i).showBal();
    }
    System.out.println("The total balance of all accounts listed are: " + sum3);
}
...