Вызов методов и как их использовать - PullRequest
0 голосов
/ 25 апреля 2020

Задача, которую я пытаюсь выполнить, состоит в том, чтобы использовать данные классы и методы, чтобы взять деньги с самого богатого счета и отдать их самым бедным, чтобы они имели одинаковый баланс, и напечатать "(имя) имеет $ (сумма ). "

Я не знаю, какой метод использовать, и все, что я пробую, дает ошибку или неправильный вывод. Спасибо за чтение и помощь.

Основной класс, который я должен добавить код:

import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.util.stream.Collectors;
import java.util.List;

public class BankManager {

private static BankAccount[] openAccountFile(String filename) {

    try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {

        List<String> rawData = reader.lines().collect(Collectors.toList());
        BankAccount[] accounts = new BankAccount[rawData.size()];

        for (int i = 0; i < accounts.length; ++i) {
            String[] splitData = rawData.get(i).split(" ");
            accounts[i] = new BankAccount(splitData[0].trim(), Float.parseFloat(splitData[1]));
        }

        return accounts;
    }
    catch (FileNotFoundException e) {
        System.err.println("The input file does not exist.");
        System.err.println(e.getMessage());
    }
    catch (IOException e) {
        System.err.println("Something went wrong trying to read the file.");
        System.err.println(e.getMessage());
    }

    return null;

}

public static void main(String[] args) {

    BankAccount[] accounts = openAccountFile(args[0]);


    System.out.println("The bank has $" + AccountManagement.overallBalance(accounts) + ".");
    System.out.println("The richest account is " + AccountManagement.richest(accounts) + ".");
    System.out.println("The poorest account is " + AccountManagement.poorest(accounts) + ".");




} 

}

Классы, которые содержат методы:

public class AccountManagement {

public static String richest(BankAccount[] accounts) {
    BankAccount richest = accounts[0];

    for (BankAccount account : accounts) {
        if (account.currentBalance() > richest.currentBalance())
            richest = account;
    }

    return richest.accountName();
}

public static String poorest(BankAccount[] accounts) {
    BankAccount poorest = accounts[0];

    for (BankAccount account : accounts) {
        if (account.currentBalance() < poorest.currentBalance())
            poorest = account;
    }

    return poorest.accountName();
}

public static float overallBalance(BankAccount[] accounts) {
    float total = 0;

    for (BankAccount account : accounts) {
        total += account.currentBalance();
    }

    return total;
}

public static BankAccount findAccount(String accountName, BankAccount[] accounts) {
    for (BankAccount account : accounts) {
        if (account.accountName().equals(accountName)) return account;
    }

    return null;
}

}

и:

public class BankAccount {

private String accountName;
private int balance;

public BankAccount(String accountName, float initialBalance) {
    this.accountName = accountName;
    this.balance = Math.round(initialBalance*100);
}

public float currentBalance() {
    return (float)this.balance/100;
}

public void withdraw(float amount) {
    balance -= Math.round(amount*100);
}

public void deposit(float amount) {
    balance += Math.round(amount*100);
}

public String accountName() {
    return this.accountName;
}

}

Текстовый файл содержит:

Luke 12.42
Cat 56.76
Nick 35.32
Mustafa 42.00

1 Ответ

1 голос
/ 25 апреля 2020

Сначала нам нужно найти самых богатых и самых бедных BankAccount. Это может быть достигнуто с помощью соответствующих AccountManagement методов:

final BankAccount richest = AccountManagement.findAccount(AccountManagement.richest(accounts), accounts);
final BankAccount poorest = AccountManagement.findAccount(AccountManagement.poorest(accounts), accounts);

Затем мы должны рассчитать целевой баланс для счетов richest и poorest. Поскольку мы хотим, чтобы они были равны, его можно рассчитать так же, как математическое среднее остатков на счетах:

final float targetBalance = (richest.currentBalance() + poorest.currentBalance()) / 2;

Затем мы должны исправить остатки на счетах richest и poorest чтобы получить желаемую сумму (targetBalance):

richest.withdraw(richest.currentBalance() - targetBalance);
poorest.deposit(targetBalance - poorest.currentBalance());

И, наконец, мы просто печатаем имена и суммы всех имеющихся у нас счетов:

for (BankAccount account : accounts) {
    System.out.println(
        account.accountName() + " has $" + account.currentBalance()
    );
}

Полный фрагмент кода:

final BankAccount richest = AccountManagement.findAccount(AccountManagement.richest(accounts), accounts);
final BankAccount poorest = AccountManagement.findAccount(AccountManagement.poorest(accounts), accounts);

final float targetBalance = (richest.currentBalance() + poorest.currentBalance()) / 2;

richest.withdraw(richest.currentBalance() - targetBalance);
poorest.deposit(targetBalance - poorest.currentBalance());

for (BankAccount account : accounts) {
    System.out.println(
        account.accountName() + " has $" + account.currentBalance()
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...