我想做的任务是利用给定的类,方法是从最富有的帐户中提取资金,并提供给最贫穷的帐户,以便他们有相同的余额,并打印“(名称)有$(金额) 。“
我对使用哪种方法一无所知,我尝试的任何方法都会产生错误或输出错误。感谢您的阅读和帮助。
我要添加代码的主要类是:
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
首先,我们需要找到最富有和最贫穷的BankAccount
。可以通过使用相应的AccountManagement
方法来实现:
final BankAccount richest = AccountManagement.findAccount(AccountManagement.richest(accounts), accounts);
final BankAccount poorest = AccountManagement.findAccount(AccountManagement.poorest(accounts), accounts);
然后我们应该计算richest
和poorest
帐户的目标余额。由于我们希望它们相等,因此可以将其计算为帐户余额的math average:
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()
);
}