Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用日期进行利息计算_Java_Arrays_Date_Arraylist_Gregorian Calendar - Fatal编程技术网

Java 无法使用日期进行利息计算

Java 无法使用日期进行利息计算,java,arrays,date,arraylist,gregorian-calendar,Java,Arrays,Date,Arraylist,Gregorian Calendar,我需要一些逻辑帮助以及一些代码帮助 我正在写一个简单的ATM程序。它将进行存款提取和余额检查 我还必须让我的程序记录每次存款的日期,并在计算用户检查余额时的5%利息时使用该日期。我遇到问题的部分是我需要存储存款金额以及与该存款对应的日期的部分。我应该用格雷戈里安·卡伦德的方法。我只是在黑暗中拍摄,但我想我会使用阵列。但我不知道如何实施它。因为我不熟悉数组 一旦我得到一个日期,当我检查余额时,我需要检查从存款到计算利息已经有多少个月了。对不起,这是一个相当复杂的问题,但我是一个新手,这是我写过的最

我需要一些逻辑帮助以及一些代码帮助

我正在写一个简单的ATM程序。它将进行存款提取和余额检查

我还必须让我的程序记录每次存款的日期,并在计算用户检查余额时的5%利息时使用该日期。我遇到问题的部分是我需要存储存款金额以及与该存款对应的日期的部分。我应该用格雷戈里安·卡伦德的方法。我只是在黑暗中拍摄,但我想我会使用阵列。但我不知道如何实施它。因为我不熟悉数组

一旦我得到一个日期,当我检查余额时,我需要检查从存款到计算利息已经有多少个月了。对不起,这是一个相当复杂的问题,但我是一个新手,这是我写过的最复杂的东西

 public void printDeposit(){
    Calendar c = new GregorianCalendar();
    BigDecimal depositamt;
    Date date = c.getTime();

    int menuselection;
    System.out.println("Press 1 to deposit, zero to return to the main menu.");
    Scanner sc = new Scanner (System.in);

    menuselection = sc.nextInt();
            if (menuselection==1){
                System.out.println("Please enter the amount: " + date);
                depositamt = sc.nextBigDecimal();
                Transaction tran = new Transaction(depositamt, date);

    }


您应该在此处使用
ArrayList
instrade of arrays,但更重要的是,您应该在此处使用数据库,即使它只是内存中的临时数据库。而且,
printDeposit
方法的名称不正确;这可能相当于打印存款收据。您希望您的逻辑是这样的:

Console console = System.getConsole();
if (console == null) {System.exit(42)}
while(true) (
    String option = console.readLine("What would you like to ask this ATM? %d to Quit, %d to deposit, %d to withdraw:", 0, 1, 2;
    switch (option) {
      case "1": acceptDeposit(); break;
      case "2": acceptWithdrawl(); break;
      case "0": quit(); break;
      default: break;
    }
}
现在,您需要编写
接受存款
接受取款
方法。在数据库方面,您需要一个
余额
表和一个
事务
表。用Java术语来说,您需要这样的类:

public class Transaction {
    enum Type {DEPOSIT, WITHDRAWL, INTEREST};
    private Long userId;
    private Type type;
    private BigDecimal amount;
    private Date date;  // Switch to Joda-Time or its Java 8 equivalent when you can.
    // getters, setters, etc.
    public getBalanceChange() {
        if (type != WITHDRAWL) {
            return amount;
        } else {
            return amount.negate();
        }
    }
}
你明白为什么你想要用户id了吗

您的应用程序将有一个事务列表,如果您保留一个将用户ID映射到余额的映射,您将需要一个余额方法:

public BigDecinmal balance(Long userId) {
    BigDecimal balance = new BigDecimal("0.00");
    for (Transaction t: transactionList) {
        if (userId.equals(t.getUserId())) {
            balance = balance.add(t.getBalanceChange());
        }
    }
}
使用数据库表,您可以对数据库进行更新。如果这个应用程序持续运行,您可能会使用JavaQuartz库安排作业来计算兴趣。对于学生应用程序,您可以使用以下方法进行模拟:

private void applyInterest(Date from, Date to){...}

事实上,这是一个反对使用
gregoriacalendar
并在每次交易时获取一个数据的论点;在实际应用中,每节课都是一天的一部分。相反,应用
Date currentDate
Date interest
变量,定期更新
currentDate

我在数据结构中看不到任何存储上次传输日期的字段。
private void applyInterest(Date from, Date to){...}