【问题标题】:Java Bank Interest/Savings CalculatorJava 银行利息/储蓄计算器
【发布时间】:2012-11-09 21:59:24
【问题描述】:

我对 Java 非常陌生,正在尝试创建一个银行储蓄和利息计算器。我已经创建了基本计算器,但是在向这个计算器添加了一些新功能后,我似乎把它搞砸了,它不再执行以前的任何任务。

我想用这个计算器完成一些事情: 1. 选择您的帐户类型(储蓄、CD 或支票)并传递给扩展 JFrame 的帐户对象。

  1. 提示用户输入原始余额、利率和期限长度。将这些值传递给 Account 对象(这是我想不通的部分)。

  2. 点击计算按钮后打印最终余额。

  3. 询问用户“想开设新帐户吗?是/否”如果是,则返回。如果没有,退出。

我缺乏一些基本的 Java 知识,这就是我现在陷入困境的原因。任何帮助表示赞赏!

帐户.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Account extends JFrame {

private int period;
private int balance;
private int rate;
private String printstring;

@Override
public String toString() {
    return String.format("Period: " + period + ", Balance: " + balance);
}

public int getPeriod() {
    return period;
}

public void setPeriod(int period) {
    this.period = period;
}

public int getBalance() {
    return balance;
}

public void setBalance(int balance) {
    this.balance = balance;
}

public int getRate() {
    return rate;
}

public void setRate(int rate) {
    this.rate = rate;
}

public String getPrintstring() {
    return printstring;
}

public void setPrintString(String printstring) {
    this.printstring = printstring;
}

public void calculate() {
    for ( int i = 0; i<period; i++)
{
    balance = (balance * rate) + balance;

}
}
}

银行家.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Banker {

// Array for type of bank account

private static void createAndShowGUI() {

    // Declare strings for period, balance, rate
    String period;
    String balance;
    String rate;

    // Prompt user for input
    period = JOptionPane.showInputDialog(null, "Number of periods (length):");
    balance = JOptionPane.showInputDialog(null, "Beginning balance:");
    rate = JOptionPane.showInputDialog(null, "Interest rate (use decimal, example: .05     = 5%):");

    // Make Calculate button
    JButton calculate = new JButton("Calculate");

    // Make 3 Labels
    JLabel blabel = new JLabel("Period: " + period);
    JLabel plabel = new JLabel("Balance: " + balance);
    JLabel flabel = new JLabel("Final Balance: " + balance);

    // Setup window with flow layout and exit on close
    JFrame frame = new JFrame("Interest Savings Calculator Plus");
    frame.setLayout(new FlowLayout());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    // Add combo box, calc button and labels
    frame.add(calculate);
    frame.add(plabel);
    frame.add(blabel);
    frame.add(flabel);
    frame.pack();
    frame.setVisible(true);


    //Display the window.
    frame.pack();
    frame.setVisible(true);
}

public static void main(String[] args) {

String[] accttype = { "Checking", "Savings", "CD" }; // Array of bank acct types
String input = (String) JOptionPane.showInputDialog(null, "Choose account...",
    "Choose bank account type", JOptionPane.QUESTION_MESSAGE, null,
    accttype, // Array of acct types
    accttype[0]); // First choice
System.out.println(input);


    //Schedule a job for the event-dispatching thread:
    //creating and showing this application's GUI.
            createAndShowGUI();
        }



}

【问题讨论】:

  • 你到底卡在哪里了?
  • 所以这是您应该从中学习的第一件事:使用某种版本控制,例如 git 或 mercurial,这样您就可以随时返回到以前的工作版本。也看看junit或testng。这一切看起来像是很多新事物,但最终的好处是巨大的。

标签: java calculator


【解决方案1】:

我只给你一个一般性的建议......

您正在使用 Money,请不要使用 float 和/或 double 作为数据类型。

floatdouble 类型中,不可能将0.1(或任何其他十的负幂)表示为floatdouble

例如,假设你有 1.03 欧元,你花了 0.42 欧元,你还剩下多少钱?

System.out.println(1.03 - .42); 打印出 0.6100000000000001。

解决这个问题的正确方法是使用BigDecimal作为数据类型,它具有add,divide,...等所有方法。 一个陷阱,BigDecimal 是不可变的,在进行计算时不要忘记这一点。

【讨论】:

  • 作为旁注,有趣的是,每个人总是告诉你永远不要用双打来计算金钱。但是在保险行业工作了十年,我什至没有遇到过一个使用双打的程序。虽然我不建议任何人使用双打,但在某些情况下,如果你做对了,使用双打确实有效,有时出于性能原因使用 BigDecimal 之类的东西不是一种选择。
【解决方案2】:

就像提示帐户类型一样,您需要提示并捕获所需值的输入:

String input = JOptionPane.showInputDialog("Question:");

这会给你一个字符串,你需要将它转换成一个数字:

double value;
try {
  value = Double.parseDouble(input);
} catch (NumberFormatException e) {
  //Handle the exception
}

您可以对所有需要的输入执行此操作。之后将它们传递给您的 Account 对象。

Account account = new Account();
account.setBalance(value);

我希望您可以从那里推断出您的需求!祝你好运。

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 2016-06-24
    • 2017-10-19
    • 2023-03-30
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多