【问题标题】:How do I keep track of the balance on a bank account?如何跟踪银行账户的余额?
【发布时间】:2015-02-18 07:23:45
【问题描述】:

我将创建一个跟踪银行帐户余额的程序。程序将使用一个循环,直到用户通过回答 no 来选择退出 Do you want to continue?

在循环中,将要求用户输入金额(存款为正数,取款为负数)。该金额应从账户余额变量中添加/减去。所有存款/取款都应保存为历史,以便我们稍后打印。当用户选择退出循环时,将打印当前帐户余额以及帐户历史记录(来自数组/ArrayList)。

现在,我想使用一个有十个槽的数组来实现历史记录功能。

我的问题是如何跟踪所有存款、取款和当前账户余额(使用具有十个槽的数组作为历史记录功能),以便在用户退出时将其打印出来程序?

我的代码:

BankApp 类:

package bankapp;

import java.util.Scanner;

public class BankApp {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        askingUser au = new askingUser();

        System.out.println("WELCOME TO OUR BANK!\nYou have 100 SEK by default in your account.");

        while (true) {

            au.userInput();

            System.out.println("Do you want to continue? Answer by Yes or No.");
            String yesOrNo = input.next();

            if (yesOrNo.equalsIgnoreCase("yes")) {

                au.userInput();

            } else if (yesOrNo.equalsIgnoreCase("no")) {
                System.out.println("History: ");

                //print out the transaction history
                System.exit(0);

            } else {

                System.out.println("Invalid character input.");

            }

        }

    }
}

askingUser 类:

package bankapp;

import java.util.Scanner;

public class askingUser {

    Scanner input = new Scanner(System.in);
    double initialBal = 100;

    public void userInput() {
        System.out.println("Enter your amount: (+ve for deposit & -ve for withdraw)");
        double inputAmount = input.nextDouble();

        if (inputAmount >= 0) {

            double newPosAm = initialBal + inputAmount;
            System.out.println("Your current balance is: " + newPosAm + " SEK");

        } else {

            double newNegAm = initialBal + inputAmount;
            System.out.println("Your current balace is: " + newNegAm + " SEK");
        }

    }

}

【问题讨论】:

  • 数组不是一个好主意,因为您需要“记住”哪个索引是最新的,然后必须以相反的顺序解析该数组。使用ArrayList 并在索引0 上插入最新条目可能会更好。然后您可以删除索引号 > 10 的条目。
  • 好主意,我就是这么想的。 ArrayList 可能会更好。
  • 我知道这是一个老问题,但如果有人偶然发现它,他们应该知道由于精度问题,双精度和浮点数不应该用于货币。应使用定点数。

标签: java arrays loops arraylist counter


【解决方案1】:

如果使用数组,则必须跟踪存储在其中的元素数量,并在必要时调整数组的大小。最简单的方法是将历史记录保存为ArrayList 中的字符串。您将为每个事务添加一条消息到该列表:

ArrayList<String> history = new ArrayList<String>();

void addToHistory(String transaction) {
    history.add(transaction);
}

void printHistory() {
    for(String s : history) {
        System.out.println(s);
    }
}

addToHistory("Withdrawal: 100 SEK" );
addToHistory("Deposit: 200 SEK" );
printHistory();

【讨论】:

  • 目前还不清楚。因为用户会多次输入数量。并且每个输入的金额都应添加到arrayList。这意味着必须自动动态添加历史记录。那是主要问题。那么您能否修改您的代码以向我展示正确的轨道。我不是强迫你这样做,这取决于你。谢谢。
  • 您只需在每笔交易中致电addToHistory。就像您将余额打印到屏幕上一样。
【解决方案2】:

你需要一个队列来做到这一点。但是,对于简单、快速和原始的实现,您可以:

  • 定义一个名为Transaction(deposit - double, withdraw - double, current account balance - double)的对象
  • ListTransactions 添加到askingUser 类中作为属性。我强烈建议将类名重命名AskingUser,使其被视为对象。
  • 在每个操作中,在您刚刚添加的 List 的末尾添加一个新的 Transaction
  • 在退出时,打印出List 的最后-say- 10 个元素;您可以通过askingUser 对象访问它。你也可以在askingUser类中定义一个函数来打印最后10个元素,如果你让函数根据选定的元素数量工作,你可以在函数的输入中添加Transactions的数量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    相关资源
    最近更新 更多