1

私はJavaで金利計算機を書いています。プログラムはユーザーに入力を求め、その入力を使用して特定の銀行口座 (当座預金、普通預金、または CD) の利息を計算します。

それが私のプログラムの要点であり、非常に単純です。しかし、今のところ、return ステートメントが createAccount メソッドで機能しない理由が正確にわかりません。どんな助けでも大歓迎です。

Banker.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();
}
}

Account.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

まず、戻り値の型がcreateAccountisAccountで、そこから a を返してStringいます。そこで失敗します。

したがって、戻り値の型を に変更しますString。また、メソッドが常にvalue. コードがたどるすべてのパスから値を返す必要があります。または、メソッドの最後に a を追加することもできreturn null;ます (ただし、前のステートメントも考慮する必要があります)。

しかし、繰り返しになりますが、メソッドstringから ,を返す理由を理解するのは困難です。createAccount実際、その方法ではアカウントをまったく作成していません。メソッドの正確な目的を反映するように、メソッドの名前を変更してください。

strings次に、使用中の演算子を比較して==いるため、コンパイラ エラーが発生すると問題が発生します。メソッドを使用equalsして文字列を比較する必要があります: -

if (input == "Checking")

する必要があります: -

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

まず、Rohit の提案に従ってください。

もう 1 つの大きな問題は、すべてのコード パスがまったく値を返さないことです。(入力が「チェック」の場合はどうなりますか?)

次に、値を返すパスがシステムの終了後に配置されます。

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また、 のいずれかのブランチ内でアカウントが作成されなかった場合は、句を追加する必要がありif-elseます。

于 2012-11-30T22:14:56.873 に答える