BakeMeMuffins92
BakeMeMuffins92

Reputation: 67

Java Interest Calculator won't compile, not sure why

I am writing an interest calculator in Java. The program prompts the user for input, and using that input calculates interest on a certain bank account (checking, savings or CD).

That is the gist of my program and it is pretty simple. But right now I am stuck with exactly why the return statement is not working in the createAccount method. Any help would be appreciated.

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

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

Upvotes: 1

Views: 793

Answers (3)

BrDaHa
BrDaHa

Reputation: 5770

Well First, follow Rohit's suggestions.

The other major problem is that not all your code paths return a value at all. (What happens if the input is "checking" ?)

Second, path that IS returning a value is placed AFTER the system Exit:

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
        }
    }
}

Are you using an IDE? or just using a notepad? Are you paying attention to the compiler warnings? Always take care of warnings, they're likely latent runtime errors.

Upvotes: 0

Rohit Jain
Rohit Jain

Reputation: 213311

First of all, the return type of createAccount is Account and you are returning a String from it. It will fail there.

So, change your return type to String. And also to ensure that your method always returns a value. You should return a value from every path your code may follow. Alternatively, you can add a return null; at the end of the method (But you should also consider the previous statement).

But again, it's hard to understand that why you are returning a string, from createAccount method. And in fact you are not creating any account in that method at all. Please rename your method so as to reflect its exact purpose.

Secondly, you are comparing your strings using == operator, that will give you problems, once you come out of Compiler errors. You should use equals method to compare string: -

if (input == "Checking")

should be: -

if (input.equals("Checking"))

Upvotes: 5

bellum
bellum

Reputation: 3710

Also you must add return clause when Account was not created inside one of the branches of if-else.

Upvotes: 0

Related Questions