-2

UPDATED: I never solved my issue with outputting the date in the specific format needed but the rest of the program works. After messing with the time.format class I did find several different methods of outputting the date in different formats and I was able to get all of them to work with the exception of the last one in the list that is supposed to be a part of the time.format class but unfortunately I was never able to figure out how to implement it. However, this is a good (in my opinion) example of a simple program to calculate interest. I've read a lot of criticisms about getters and setters but they seemed to work just fine for this program. Please note that I am still learning Java and programming as a whole.

package accountproject;

// two imports needed for date and time
import java.time.format.*;
import java.time.*;
// import standard exception error text
import java.text.ParseException;
// import EVERYTHING!
import java.util.*;

public class Account {

private static int id = 0;
private static double balance = 0;
private static double annualInterestRate = 0;
private static ZonedDateTime dateCreated;
private static double MonthlyInterestRate = annualInterestRate/12;

public Account()
{
    // empty constructor
}

public Account(int id, double balance, double annualInterestRate, ZonedDateTime dateCreated) {
    super();
    Account.id = 0;
    Account.balance = 0;
    Account.annualInterestRate = 4.5;
}

public int getId() {
    return id;
}

public void setId(int id) {
    Account.id = id;
}

public static double getBalance(double d) {
    return balance;
}

public void setBalance(double balance) {
    Account.balance = balance;
}

public double getAnnualInterestRate() {
    return annualInterestRate;
}

public void setAnnualInterestRate(double annualInterestRate) {
    Account.annualInterestRate = annualInterestRate;
}

public static ZonedDateTime ConvertStringToDate(String dateNow) {
    try
{
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
    ZonedDateTime date = ZonedDateTime.parse(dateNow, formatter);

    return date;
}
 catch (DateTimeParseException e)
{
    System.out.println(e);
}
    ZonedDateTime date = null;
    return date;
}

public static double getMonthlyInterestRate(double annualInterestRate2) {

    double temp = annualInterestRate2/12;

    MonthlyInterestRate = temp;

    return MonthlyInterestRate;
}

public static double getMonthlyInterest(double newBalance2) {

    double temp = 100/MonthlyInterestRate;

    double temp2 = newBalance2/temp;

    double temp3 = newBalance2 + temp2;

    newBalance2 = temp3;

    return temp2;
}

public static double deposit(double balance, double deposit) {

    double temp = balance + deposit;

    balance = temp;

    return balance;
}

public static double withdrawal(double balance, double withdrawal) {

    double temp = balance - withdrawal;

    balance = temp;

    return balance;
}

    public static void main(String[] args) throws ParseException {

        // establish a scanner and set example values
        Scanner stdin = new Scanner(System.in);
        id = 1122;
        balance = 20000;
        MonthlyInterestRate = .375;
        double withdrawal = 2500;
        double deposit = 3000;

        double balanceExp = deposit(balance,deposit);
        balanceExp = withdrawal(balanceExp,withdrawal);
        double balanceExp2 = getMonthlyInterest(balanceExp);
        double monthlyInterest = balanceExp2;

        String dateExp = "Fri Oct 06 16:10:59 GMT 2017";
        dateCreated = ConvertStringToDate(dateExp);

        System.out.println("SAMPLE: Account ID " + id + " with a balance of $" + balanceExp
                 + ",\nhas accrued $" + monthlyInterest + " in interest and was opened on " 
                + dateCreated + ".");

        System.out.println("Please enter the ID number:");

        // get the id number input
        id = stdin.nextInt();
        stdin.nextLine();

        System.out.println("Typically, the original balance will be $20,000.00.\nPlease enter the balance:");

        // get the starting balance input
        balance = stdin.nextInt();
        stdin.nextLine();

        double newBalance = balance;

        Account.getBalance(20000.00);

        System.out.println("Please enter the deposit amount:");

        // ensure deposit is set to 0 before getting input
        deposit = 0.00;

        // get the deposit amount from input
        deposit = stdin.nextDouble();
        stdin.nextLine();

        newBalance = deposit(balance, deposit);

        System.out.println("Please enter the withdrawal amount:");

        // ensure withdrawal is set to 0 before getting input
        withdrawal = 0.00;

        // get the deposit amount from input
        withdrawal = stdin.nextDouble();
        stdin.nextLine();

        double newBalance2 = withdrawal(newBalance, withdrawal);
        double newBalance3 = getMonthlyInterest(newBalance2);
        double MonthlyInterest = newBalance3;

        print(id, newBalance2, MonthlyInterest, dateCreated);

        stdin.close();
    }

    public static void print(int id, double newBalance2, double MonthlyInterest, ZonedDateTime dateCreated2)
    {
            System.out.println("To verify: the Account ID is " + id + " with a balance of $" + newBalance2
                    + ",\nhas accrued $" + MonthlyInterest + " in interest, and was opened on " + dateCreated2 + ".");
    }
}
Sir Papilonius
  • 113
  • 1
  • 2
  • 11
  • You are using troublesome old date-time classes that are now legacy, supplanted by the java.time classes. Avoid `Date` & `Calendar`; use `Instant` & `ZonedDateTime`. Also, do not use floating-point types for money matters; use `BigDecimal`. Lastly, search Stack Overflow thoroughly before posting. All the basic date-time questions have been asked and answered. – Basil Bourque Oct 05 '17 at 14:14
  • Thank you for the pointers. The reason I ask the questions is because I have trouble finding the answers in a way that makes sense to me. I have spent over a year searching this site for answers to various coding questions because all of my professors teach the principles behind the code and not the code itself. This is a sore subject for me because I can understand the ideas in english and even pseudo code but they all treat the code itself like it's a government secret. If you don't want to answer the question, then don't, there is no reason to be rude. – Sir Papilonius Oct 05 '17 at 20:18
  • The real issue is the stack over flow searches are not filtering old version questions and new users are being presented with answers that no longer work or are depreciated. – Jeremiah Stillings Oct 06 '17 at 03:13

3 Answers3

1

I believe the issue is with this line in main.

withdrawl(balance, withdrawl);

You have to assign the returned value of a method to a variable.

double currentBalance = withdrawl(balance, withdrawl);
print(id, currentBalance, MonthlyInterestRate, dateCreated);
Jeremiah Stillings
  • 743
  • 1
  • 7
  • 19
0

I spent wayyy wayyy to much time relearning this myself. I did not realize java 8 had new java.time

There is a ton of changes here. Hope this helps all changes are commented in the code

import java.time.format.*;
import java.time.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class Account {

private static int id = 0;
private static double balance = 0;
private static double annualInterestRate = 0;
private static Date dateCreated;
private static double MonthlyInterestRate = annualInterestRate/12;


public Account()
{
    // empty constructor
}

/**
 * @param id
 * @param balance
 * @param annualInterestRate
 * @param dateCreated
 * regular constructors
 */

public Account(int id, double balance, double annualInterestRate, Date dateCreated) {
    super();
    Account.id = 0;
    Account.balance = 0;
    Account.annualInterestRate = 4.5;
    Account.dateCreated = dateCreated;
}

public int getId() {
    return id;
}

public void setId(int id) {
    Account.id = id;
}

public static double getBalance(double d) {
    return balance;
}

public void setBalance(double balance) {
    Account.balance = balance;
}

public double getAnnualInterestRate() {
    return annualInterestRate;
}

public void setAnnualInterestRate(double annualInterestRate) {
    Account.annualInterestRate = annualInterestRate;
}

public static LocalDate ConvertStringToDate(String dateNow) {
    try
{
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM d yyyy", Locale.ENGLISH);
    LocalDate date = LocalDate.parse(dateNow, formatter);
    System.out.println(date);
    return date;
}
 catch (DateTimeParseException e)
{
    System.out.println(e);
}
LocalDate date = null;
return date;



}



public static double getMonthlyInterestRate(double annualInterestRate2) {

    double temp = annualInterestRate2/12;

    MonthlyInterestRate = temp;

    return MonthlyInterestRate;

}

public double getMonthlyInterest() {

    double temp = 100/annualInterestRate;

    double temp2 = getBalance(0)/temp;

    double temp3 = balance + temp2;

    System.out.println(temp3);

    return temp3;

}

public static double deposit(double balance, double deposit) {

    double temp = balance + deposit;

    balance = temp;

    return balance;
}

public static double withdrawl(double balance, double withdrawl) {

    double temp = balance - withdrawl;

    balance = temp;

    return balance;
}

    public static void main(String[] args) throws ParseException {
        //create Scanner 1 time. no need to create over and over
        Scanner stdin = new Scanner(System.in);
        id = 1122;
        balance = 20000;
        MonthlyInterestRate = .375;

        System.out.println("SAMPLE: Account ID " + id + " with a balance of " + balance + " "
                + "and a monthly interest rate of " + MonthlyInterestRate + " opened on " +
                dateCreated + ".");

        System.out.println("Please enter the ID number:");

        id = stdin.nextInt();
        // consume the /n
        stdin.nextLine();

        System.out.println("Typically, the original balance will be $20,000.00.\nPlease enter the balance:");



        balance = stdin.nextInt();
        // consume the /n
        stdin.nextLine();

        double newBalance = balance;

        Account.getBalance(20000.00);

        System.out.println("Please enter the date created like: MM d yyyy");


        // assign your string to your scanned object
        String dateNow = stdin.nextLine();
        //catch your returned date
        LocalDate dateCreated = ConvertStringToDate(dateNow);

        System.out.println("Please enter the deposit amount:");



        double deposit = 0.00;

        deposit = stdin.nextDouble();
        // consume the /n
        stdin.nextLine();

        newBalance = deposit(balance, deposit);

        System.out.println("Please enter the withdrawl amount:");



        double withdrawl = 0.00;

        withdrawl = stdin.nextDouble();
        // consume the /n
        stdin.nextLine();

        double newBalance2 = withdrawl(newBalance, withdrawl);

        double annualInterestRate2 = 4.5;

        double MonthlyInterestRate2 = getMonthlyInterestRate(annualInterestRate2);

        // pass your local date
        print(id, newBalance2, MonthlyInterestRate2, dateCreated);
    }

    public static void print(int id, double balance, double MonthlyInterestRate2, LocalDate dateCreated)
    {
            System.out.println("To verify: the Account ID is " + id + " with a balance of $" + balance + " "
                    + "and a monthly interest rate of " + MonthlyInterestRate2 + "% opened on " +
                    dateCreated + ".");
    }
 }
Jeremiah Stillings
  • 743
  • 1
  • 7
  • 19
  • What part of this is hard code and what is program specific? obviously the ints and string are, but the first line I'm not sure which are variables and which are the syntax. my get method is getDateCreated with dateCreated as the variable, would it be Date dateCreated2 = new dateCreated? I don't have access to my code at the moment. – Sir Papilonius Oct 05 '17 at 05:43
  • I actually miss read the question. I thought you wanted to take a date datatype and convert it to its string pieces. – Jeremiah Stillings Oct 05 '17 at 15:47
  • https://stackoverflow.com/questions/6510724/how-to-convert-java-string-to-date-object – Jeremiah Stillings Oct 05 '17 at 15:48
  • Freakin' brilliant, thank you so much. I knew I was getting too messy with it. – Sir Papilonius Oct 06 '17 at 22:30
0

I never did figure out exactly how to set the formatting to get the date the way my professor wanted but I got 100% so I guess in the end it didn't matter that much. Thanks to Jeremiah Stillings though, I appreciate all the help. This is what I ended up with:

 package accountproject;

 // two imports needed for date and time
 import java.time.format.*;
 import java.time.*;
 // import standard exception error text
 import java.text.ParseException;
 // import EVERYTHING!
 import java.util.*;

 public class Account {

private static int id = 0;
private static double balance = 0;
private static double annualInterestRate = 0;
private static ZonedDateTime dateCreated;
private static double MonthlyInterestRate = annualInterestRate/12;

public Account()
{
    // empty constructor
}

/**
 * @param id
 * @param balance
 * @param annualInterestRate
 * @param dateCreated
 * regular constructors
 */

public Account(int id, double balance, double annualInterestRate, ZonedDateTime dateCreated) {
    super();
    Account.id = 0;
    Account.balance = 0;
    Account.annualInterestRate = 4.5;
}

public int getId() {
    return id;
}

public void setId(int id) {
    Account.id = id;
}

public static double getBalance(double d) {
    return balance;
}

public void setBalance(double balance) {
    Account.balance = balance;
}

public double getAnnualInterestRate() {
    return annualInterestRate;
}

public void setAnnualInterestRate(double annualInterestRate) {
    Account.annualInterestRate = annualInterestRate;
}

public static ZonedDateTime ConvertStringToDate(String dateNow) {
    try
{
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
    ZonedDateTime date = ZonedDateTime.parse(dateNow, formatter);

    return date;
}
 catch (DateTimeParseException e)
{
    System.out.println(e);
}
    ZonedDateTime date = null;
    return date;
}

public static double getMonthlyInterestRate(double annualInterestRate2) {

    double temp = annualInterestRate2/12;

    MonthlyInterestRate = temp;

    return MonthlyInterestRate;
}

public static double getMonthlyInterest(double newBalance2) {

    double temp = 100/MonthlyInterestRate;

    double temp2 = newBalance2/temp;

    double temp3 = newBalance2 + temp2;

    newBalance2 = temp3;

    return temp2;
}

public static double deposit(double balance, double deposit) {

    double temp = balance + deposit;

    balance = temp;

    return balance;
}

public static double withdrawal(double balance, double withdrawal) {

    double temp = balance - withdrawal;

    balance = temp;

    return balance;
}

    public static void main(String[] args) throws ParseException {

        // establish a scanner and set example values
        Scanner stdin = new Scanner(System.in);
        id = 1122;
        balance = 20000;
        MonthlyInterestRate = .375;
        double withdrawal = 2500;
        double deposit = 3000;

        double balanceExp = deposit(balance,deposit);
        balanceExp = withdrawal(balanceExp,withdrawal);
        double balanceExp2 = getMonthlyInterest(balanceExp);
        double monthlyInterest = balanceExp2;

        String dateExp = "Fri Oct 06 16:10:59 GMT 2017";
        dateCreated = ConvertStringToDate(dateExp);

        System.out.println("SAMPLE: Account ID " + id + " with a balance of $" + balanceExp
                 + ",\nhas accrued $" + monthlyInterest + " in interest and was opened on " 
                + dateCreated + ".");

        System.out.println("Please enter the ID number:");

        // get the id number input
        id = stdin.nextInt();
        stdin.nextLine();

        System.out.println("Typically, the original balance will be $20,000.00.\nPlease enter the balance:");

        // get the starting balance input
        balance = stdin.nextInt();
        stdin.nextLine();

        double newBalance = balance;

        Account.getBalance(20000.00);

        System.out.println("Please enter the deposit amount:");

        // ensure deposit is set to 0 before getting input
        deposit = 0.00;

        // get the deposit amount from input
        deposit = stdin.nextDouble();
        stdin.nextLine();

        newBalance = deposit(balance, deposit);

        System.out.println("Please enter the withdrawal amount:");

        // ensure withdrawal is set to 0 before getting input
        withdrawal = 0.00;

        // get the deposit amount from input
        withdrawal = stdin.nextDouble();
        stdin.nextLine();

        double newBalance2 = withdrawal(newBalance, withdrawal);
        double newBalance3 = getMonthlyInterest(newBalance2);
        double MonthlyInterest = newBalance3;

        print(id, newBalance2, MonthlyInterest, dateCreated);

        stdin.close();
    }

    public static void print(int id, double newBalance2, double MonthlyInterest, ZonedDateTime dateCreated2)
    {
            System.out.println("To verify: the Account ID is " + id + " with a balance of $" + newBalance2
                    + ",\nhas accrued $" + MonthlyInterest + " in interest, and was opened on " + dateCreated2 + ".");
    }
 }
Sir Papilonius
  • 113
  • 1
  • 2
  • 11