1

我正在用 Java 编写一个兴趣计算器。该程序提示用户输入,并使用该输入计算某个银行帐户(支票、储蓄或 CD)的利息。

这就是我的程序的要点,而且非常简单。但是现在我被困在为什么 return 语句在 createAccount 方法中不起作用。任何帮助,将不胜感激。

银行家.java:

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

public class Banker {

// Array for type of bank account
public static void createAndShowGUI() {


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

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


    // 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 2 Labels
    JLabel blabel = new JLabel("Period: " + period);
    JLabel plabel = new JLabel("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);

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

}

public static Account createAccount(String type, String checkno, String lengthm, String input) {
    String message = "Would you like to open another account?";
    String title = "Are you sure?";
    if (input == "Checking") {
        checkno = JOptionPane.showInputDialog(null, "First check number:");

        // display the JOptionPane showConfirmDialog
        int reply = JOptionPane.showConfirmDialog(null, message, title, JOptionPane.YES_NO_OPTION);
        if (reply == JOptionPane.YES_OPTION) {
            System.exit(0);

        }
    } else if (input == "CD") {
        lengthm = JOptionPane.showInputDialog(null, "Length until maturity:");

        // display the JOptionPane showConfirmDialog
        int reply = JOptionPane.showConfirmDialog(null, message, title,     JOptionPane.YES_NO_OPTION);
        if (reply == JOptionPane.YES_OPTION) {
            System.exit(0);
            return input;
        }
    }
}

public static void main(String[] args) {
    createAndShowGUI();
}
}

账户.java

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

public class Account implements ActionListener {

JButton calculate;
private int period;
private int balance;
private int fbalance;
private int rate;
private int monthlyFee;
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 int getFbalance() {
    return fbalance;
}

public void setFbalance(int fbalance) {
    this.fbalance = fbalance;
}

public String getPrintstring() {
    return printstring;
}

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

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

}

public void actionPerformed(ActionEvent e) {
    calculate();
}
}
4

3 回答 3

5

首先, is 的返回类型,createAccount并且Account您正在String从中返回 a 。它会在那里失败。

因此,将您的返回类型更改为String. 并且还要确保您的方法始终返回一个value. 您应该从代码可能遵循的每条路径返回一个值。或者,您可以return null;在方法的末尾添加 a (但您还应该考虑前面的语句)。

但同样,很难理解为什么你要返回一个string, fromcreateAccount方法。事实上,您根本没有在该方法中创建任何帐户。请重命名您的方法以反映其确切用途。

其次,您正在比较您的stringsusing==运算符,一旦您摆脱编译器错误,这会给您带来问题。您应该使用equals方法来比较字符串:-

if (input == "Checking")

应该: -

if (input.equals("Checking"))
于 2012-11-30T22:13:41.793 回答
0

那么首先,听从 Rohit 的建议。

另一个主要问题是并非所有代码路径都返回一个值。(如果输入是“检查”会发生什么?)

其次,返回值的路径放在系统退出之后:

public static Account createAccount(String type, String checkno, String lengthm, String input) {
    String message = "Would you like to open another account?";
    String title = "Are you sure?";
    if (input == "Checking") {
        checkno = JOptionPane.showInputDialog(null, "First check number:");

        // display the JOptionPane showConfirmDialog
        int reply = JOptionPane.showConfirmDialog(null, message, title, JOptionPane.YES_NO_OPTION);
        if (reply == JOptionPane.YES_OPTION) {
            System.exit(0);

        }
        // Return if input == checking not here
    } else if (input == "CD") {
        lengthm = JOptionPane.showInputDialog(null, "Length until maturity:");

        // display the JOptionPane showConfirmDialog
        int reply = JOptionPane.showConfirmDialog(null, message, title,     JOptionPane.YES_NO_OPTION);
        if (reply == JOptionPane.YES_OPTION) {
            System.exit(0);
            return input;   // never gets here
        }
    }
}

你在使用 IDE 吗?还是只使用记事本?您是否注意编译器警告?始终注意警告,它们可能是潜在的运行时错误。

于 2012-11-30T22:20:14.880 回答
0

return此外,当 Account 的一个分支内未创建帐户时,您还必须添加子句if-else

于 2012-11-30T22:14:56.873 回答