调用方法及其使用方法

问题描述 投票:-2回答:1

我想做的任务是利用给定的类,方法是从最富有的帐户中提取资金,并提供给最贫穷的帐户,以便他们有相同的余额,并打印“(名称)有$(金额) 。“

我对使用哪种方法一无所知,我尝试的任何方法都会产生错误或输出错误。感谢您的阅读和帮助。

我要添加代码的主要类是:

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
java methods
1个回答
1
投票

首先,我们需要找到最富有和最贫穷的BankAccount。可以通过使用相应的AccountManagement方法来实现:

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

然后我们应该计算richestpoorest帐户的目标余额。由于我们希望它们相等,因此可以将其计算为帐户余额的math average

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

然后我们应更正richestpoorest帐户余额,以达到所需的金额(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()
    );
}
© www.soinside.com 2019 - 2024. All rights reserved.