Submersed24
Submersed24

Reputation: 49

Account class error 2

I am still having trouble figuring out how the heck the most efficient way to do this is.. Basically, I am trying to make the balance = 0 for every object in the Account array created. I tried using a for loop and set balance = 0for each account created, but I am unsure of how to make this work since the balance variable is created in the class that has all of the methods. I have been trying to this problem all day, but no luck. Thanks.

Main method:
import java.util.Scanner;
import java.text.NumberFormat;
public class Account2
{
  public static void main(String[] args)
  {
    Scanner scan = new Scanner(System.in);
    Account[] acct = new Account[30];
    for (int count2; count2 < 30; count2++)
    {
      balance = 0; //Initial balance is always set to zero to be able to run fresh program every time
    }
    System.out.println("Enter your account number (1-30): ");
    int key = scan.nextInt() - 1;
    int reset = 0;
    while (reset == 0)
    {
      System.out.println("Enter W for withdrawl; D for deposit; X to escape");
      char choice = scan.next().charAt(0);

      if  (choice == 'W' || choice == 'w' || choice == 'D' || choice == 'd' || choice == 'x' || choice == 'X')
      {
        if (choice == 'W' || choice == 'w')
        {
          System.out.println("Enter amount to withdraw: ");
          Double withdraw1 = scan.nextDouble();
          if (withdraw1 <= acct[key].getBalance())
          {
            acct[key].withdraw(withdraw1);
            System.out.println("User # " + key++ + " funds after withdraw: " + acct[key].getBalance() + "$");
            System.out.println("User # " + key++ + " funds after interest: " + acct[key].addInterest() + "$");
            reset++;
          }
          else
            System.out.println("Insufficient funds.");
        }

        if (choice == 'D' || choice == 'd')
        {
          System.out.println("Enter amount to deposit: ");
          Double deposit1 = scan.nextDouble();
          if (deposit1 > 0)
          {
            acct[key].deposit(deposit1);
            System.out.println("User # " + key++ + " funds after deposit: " + acct[key].getBalance() + "$");
            System.out.println("User # " + key++ + " funds after interest: " + acct[key].addInterest() + "$");
            reset++;
          }
          else
            System.out.println("Use the withdrawl feature to withdrawl money.");

        }
        if (choice == 'x' || choice == 'X')
          System.out.println("Thank You for using this bank.");
          reset++;
      }
      else
        {
          System.out.println("Invalid entry, please try again");
          reset = 0;
        }
    }
  }
}

Supporting class:

public class Account
{
  private final double RATE = 0.03; //Interest is 3%

  private int acctNumber;
  private String name;
  private balance;

  //Defines owner, account number, and initial balance.
  public Account(String owner, int account, double initial)
  {
    name = owner;
    acctNumber = account;
    balance = initial;
  }

  //deposits a specified amount and returns new balance
  public double deposit(double amount)
  {
    balance = balance + amount;
    return balance;
  }

  //withdraws the specified amount from the account and applies the fee
  //                                                  + returns balance
  public double withdraw(double amount)
  {
    int fee = 1;
    balance = balance - amount - fee;
    return balance;
  }

  //Adds interest to the account
  public double addInterest()
  {
    balance += (balance * RATE);
    return balance;
  }
  public double getBalance()
  {
    return balance;
  }

  //returns a one line description of the account as a string
  public String toString()
  {
    NumberFormat fmt = NumberFormat.getCurrencyInstance();
    return acctNumber + "/t" + name + "/t" + fmt.format(balance);
  }
}

Upvotes: 2

Views: 68

Answers (1)

Mark Peters
Mark Peters

Reputation: 81084

From an outside class, you can only interact with Account in the way exposed in its visible (e.g. public) API.

In this case, the current way to do this would be to withdraw() the current balance:

acct[i].withdraw(acct[i].getBalance());

Though this specific case would put the balance into the negatives because you charge a fee for a withdrawal (which is hidden from the calling class).

If you were to expose a setBalance method on Account, you could instead do

acct[i].setBalance(0);

However on closer look, it seems like what you are having trouble with is actually initializing the array of accounts. You can do this like this:

for (int count2; count2 < 30; count2++)
{
  acct[count2] = new Account(owner, count2, 0);
}

Upvotes: 1

Related Questions