Variable assignment problem

I am creating a project that allows a user to do what you normally can at a bank (create, delete accounts, withdraw, make deposits, print transactions).

My problem is printing the transaction. I can print something, but the wrong values ​​appear. For example, when creating a bank account, you would need to enter an initial balance, which was (5.00). When I print a transaction, nothing comes up. So I deposit money into the same account (10.00), when I type, (5.00) from it appears and appears (10.00) in the transaction. However, when I look at the account balance it all adds up to what it shows.

Can anyone help me troubleshoot and fix the problem?

package mainsample;
import java.util.*;

public class Main {


    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        BankProcess bankProcess = new BankProcess();
        TransactionProcess transactionProcess = new TransactionProcess();


    Bank bank = new Bank();
    BankAccount bankAccount = new BankAccount();

    int input;
    int selection;

    while(true) {
      System.out.println(""); 
      System.out.println("######## MENU ########");
      System.out.println("[1] Create an account");
      System.out.println("[2] Print all existing accounts");
      System.out.println("[3] Delete an account");
      System.out.println("[4] Deposit");
      System.out.println("[5] Withdraw");
      System.out.println("[6] Print transactions");
      System.out.println("[0] Exit");      
      System.out.println("######################");
      System.out.println("Please choose one of the following: ");
      selection = scan.nextInt();

      switch (selection) {

        case 0:
          System.out.println("Exit Successful");
          System.exit(0);
            break;

        case 1:
          System.out.println("'[1] Create an account' has been selected.");
          System.out.print("Account Id: ");
          int accountId = scan.nextInt();
          scan.nextLine();

          System.out.print("Holder Name: ");
          String holderName = scan.nextLine();

          System.out.print("Holder Address: ");
          String holderAddress = scan.nextLine();

          System.out.print("Opening Balance: ");
          double openingBalance = scan.nextDouble();

          System.out.print("Open Date: ");

          String openDate = scan.next();

          bankAccount = new BankAccount(accountId, holderName, openingBalance, holderAddress, openDate);
          bank.setAccounts(bankProcess.openNewAccount(bank.getAccounts(), bankAccount));

          System.out.println("Successfully Added.");
          break;      

        case 2:
          System.out.println("'[2] Display all existing accounts' has been selected");
          System.out.println("-----------------------------------------------------");
            bank.getAccounts().forEach((i,b)->System.out.println(b));
          System.out.println("-----------------------------------------------------");
            break;

        case 3:
            System.out.println("[3] Delete an account has been selected");
            System.out.println("Enter the account ID: ");
            int accountNo = scan.nextInt();
            bankAccount = bank.getAccount(accountNo); // get bankAccount from account id
            bank.removeAccounts(bankProcess.removeAccount(bank.getAccounts(), bankAccount));
            System.out.println("Account has been deleted.");
      break;

        case 4:
            System.out.println("[4] Deposit has been selected");
            System.out.println("Enter account ID: ");
            int accountNumber =  scan.nextInt(); 

            System.out.println("Enter deposit amount: ");
            double depositAmount = scan.nextDouble();           

            transactionProcess.deposit(bankAccount, depositAmount);


            break;

        case 5:
            System.out.println("[5] Withdraw has been selected");
            System.out.println("Enter account ID: ");
            int accountNu =  scan.nextInt(); 

            System.out.println("Enter withdraw amount: ");
            double withdrawAmount = scan.nextDouble();           

            transactionProcess.withdraw (bankAccount, withdrawAmount);           

            break;           


        case 6:
            System.out.println("[6] Print Transaction has been selected");
            System.out.println("Enter account ID: ");
            int accountN = scan.nextInt();
            bankAccount = bank.getAccount(accountN);
            for (Transaction transaction: bankAccount.getTransactions()) {
            // print transaction information ...
            System.out.println(transaction.toString());

}



            break;






        default:
          System.out.println("Your choice was not valid!");

      }

    }
  }
}

      

package mainsample;

/**
 *
 * @author Khalid
 */
public class Transaction {


  private String transactionType;
  private double transactionAmount;
  private int transactionDate;


  public Transaction() {}

  public Transaction( String transactionType, double transactionAmount, int transactionDate) {

    this.transactionType = transactionType;
    this.transactionAmount = transactionAmount;
    this.transactionDate = transactionDate;

  }

  public int getTransactionDate() {
      return transactionDate;
  }

  public void setTransactionDate (int transactionDate) {
      this.transactionDate = transactionDate;
  }


  public String getTransactionType() {
    return transactionType;
  }

  public void setTransactionType(String transactionType) {
    this.transactionType = transactionType;
  }

  public double getTransactionAmount() {
    return transactionAmount;
  }

  public void setTransactionAmount(double transactionAmount) {
    this.transactionAmount = transactionAmount;
  }

  //Override the toString() method of String ? 
  public String toString() {
    return "\nTransaction Amount : "+ this.transactionAmount +
           "\nTransaction Type : " + this.transactionType +
           "\nTransaction Date:  " + this.transactionDate;

  }

}

      

package mainsample;
/**
 *
 * @author Khalid
 */
public class TransactionProcess {

    public void deposit(BankAccount bankAccount, double depositAmount) {
    //Get the CurrentBalance
    double currentBalance = bankAccount.getCurrentBalance();

    //First Argument : set the Id of transaction
    //Second Argument : set the Type of Transaction
    //Third Argument : set the TransactionAmount 
    //Fourth Argument : set the Balance Before the transaction (for record purposes)
    Transaction transaction = new Transaction("Deposit", currentBalance, (int) depositAmount);

    if (depositAmount <= 0) {
      System.out.println("Amount to be deposited should be positive");
    } else {
      //Set the updated or transacted balance of bankAccount.
      bankAccount.setCurrentBalance(currentBalance + depositAmount);
      //then set the MoneyAfterTransaction

      bankAccount.addTransaction(transaction);    // adds a transaction to the bank account
      System.out.println(depositAmount + " has been deposited.");
    }

  }

  // Explanation same as above
  public void withdraw(BankAccount bankAccount, double withdrawAmount) {
    double currentBalance = bankAccount.getCurrentBalance();
    Transaction transaction = new Transaction("Withdraw", currentBalance, (int) withdrawAmount);

    if (withdrawAmount <= 0) {
      System.out.println("Amount to be withdrawn should be positive");
    } else {
      if (currentBalance < withdrawAmount) {
        System.out.println("Insufficient balance");
      } else {
        bankAccount.setCurrentBalance(currentBalance - withdrawAmount);        
        bankAccount.addTransaction(transaction);    // adds a transaction to the bank account
        System.out.println(withdrawAmount + " has been withdrawed,");
      }
    }
  }
}

      

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package mainsample;
import java.util.*;
/**
 *
 * @author Khalid
 */
public class BankAccount {
    private int accountId;
    private String holderName;
    private String holderAddress;
    private String openDate;
    private double currentBalance;

    private List<Transaction> transactions = new ArrayList<Transaction>();

    //Provide Blank Constructor
    public BankAccount(){}

    //Constructor with an arguments.
    public BankAccount(int accountNum, String holderNam,double currentBalance, String holderAdd,String openDate) {
            this.accountId = accountNum;
            this.holderName = holderNam;
            this.holderAddress = holderAdd;
            this.openDate = openDate;
            this.currentBalance = currentBalance;
    }

    // Always Provide Setter and Getters
    public int getAccountId() {
        return accountId;
    }
    public void setAccountId(int accountId) {
        
         this.accountId = accountId;                  
    }
    public String getHolderName() {
        return holderName;
    }
    public void setHolderName(String holderName) {
        this.holderName = holderName;
    }
    public String getHolderAddress() {
        return holderAddress;
    }
    public void setHolderAddress(String holderAddress) {
        this.holderAddress = holderAddress;
    }
    public String getOpenDate() {
        return openDate;
    }
    public void setOpenDate(String openDate) {
        this.openDate = openDate;
    }
    
    public double getCurrentBalance() {
        return currentBalance;
    }
    public void setCurrentBalance(double currentBalance) {
        this.currentBalance = currentBalance;
    }

    public List<Transaction> getTransactions() {
        return transactions;
    }

    public void setTransactions(List<Transaction> transactions) {
        this.transactions = transactions;
    }
    
    public void addTransaction(Transaction transaction){
      if(transactions.size() >= 6){  // test if the list has 6 or more transactions saved 
      transactions.remove(0);     // if so, then remove the first (it the oldest)
     }
     transactions.add(transaction); // the new transaction is always added, no matter how many other transactions there are already in the list
     }

    public String toString(){
        return "\nAccount number: " + accountId + 
                "\nHolder name: " + holderName + 
                "\nHolder address: " + holderAddress + 
                "\nOpen Date: " + openDate + 
                "\nCurrent balance: " + currentBalance;
    }

   
}
      

Run codeHide result


package mainsample;
import java.util.*;
/**
 *
 * @author Khalid
 */
public class Bank {
    
    private TreeMap<Integer,BankAccount> bankAccounts = new TreeMap<Integer,BankAccount>();

 
    
    public TreeMap<Integer, BankAccount> getAccounts() {
        return bankAccounts;
    }
    public void setAccounts(TreeMap<Integer, BankAccount> accounts) {
        this.bankAccounts = accounts;
    }
    
     public BankAccount getAccount(Integer accountNumber){
     return bankAccounts.get(accountNumber);
     }

    
    public void removeAccounts(TreeMap<Integer, BankAccount> accounts) {
        this.bankAccounts = accounts;
    }

   
}
      

Run codeHide result


package mainsample;
import java.util.*;
/**
 *
 * @author Khalid
 */
public class BankProcess {
    // return the  Updated list of BankAccounts
    public TreeMap<Integer,BankAccount> openNewAccount(TreeMap<Integer,BankAccount> bankAccounts,BankAccount bankAccount) {
        //Get the List of existing bank Accounts then add the new BankAccount to it.
        bankAccounts.put(bankAccount.getAccountId(), bankAccount);        
        return bankAccounts;
    }
    
    public TreeMap<Integer,BankAccount> removeAccount(TreeMap<Integer,BankAccount> bankAccounts,BankAccount bankAccount) {
      bankAccounts.remove(bankAccount.getAccountId(), bankAccount);
      return bankAccounts;  
        
    }
    

    

}
      

Run codeHide result


+3


source to share


2 answers


First you made a mistake in the Transaction constrctor

public Transaction( String transactionType, double transactionAmount, int transactionDate) {

        this.transactionType = transactionType;
        this.transactionAmount = transactionAmount;
        this.transactionDate = transactionDate;

    }

      

But you assign such

Transaction transaction = new Transaction("Deposit", currentBalance, (int) depositAmount);

      

your order of arguments is completely wrong here. why you assign the deposit amount instead of the date. it should be like

Transaction transaction = new Transaction("Deposit", (int) depositAmount,date );

      



Also, when you create a new account, you do not add this amount to the transaction. You create a new account using this code

bankAccount = new BankAccount(accountId, holderName, openingBalance, holderAddress, openDate);
bank.setAccounts(bankProcess.openNewAccount(bank.getAccounts(), bankAccount));

      

But you don't add this initial amount to the transaction. it must be included inside the bankAccount constructor

Transaction transaction = new Transaction("Deposit", 0, (int) depositAmount);

if (depositAmount <= 0) {
  System.out.println("Amount to be deposited should be positive");
} else {
  //Set the updated or transacted balance of bankAccount.
  bankAccount.setCurrentBalance(currentBalance + depositAmount);
  //then set the MoneyAfterTransaction

  bankAccount.addTransaction(transaction);    // adds a transaction to the bank account
  System.out.println(depositAmount + " has been deposited.");
}

      

Now I am getting the correct output. when you create the account you set up. when you make a deposit, you have not set a date. So you cannot set a transaction date for deposit or withdrawal

Transaction Amount : 5.0 Transaction Type : Deposit Transaction Date:  4

Transaction Amount : 10.0 Transaction Type : Deposit Transaction Date: 10

      

0


source


You don't call:

bankAccount = bank.getAccount (accountN);

to indicate your bank account in paragraphs 4 (deposit) and 5 (withdraw).



FIX:

   case 4:
        System.out.println("[4] Deposit has been selected");
        System.out.println("Enter account ID: ");
        int accountNumber =  scan.nextInt(); 

        System.out.println("Enter deposit amount: ");
        double depositAmount = scan.nextDouble();           
  --->  bankAccount = bank.getAccount(accountN);
        transactionProcess.deposit(bankAccount, depositAmount);


        break;

    case 5:
        System.out.println("[5] Withdraw has been selected");
        System.out.println("Enter account ID: ");
        int accountNu =  scan.nextInt(); 

        System.out.println("Enter withdraw amount: ");
        double withdrawAmount = scan.nextDouble();           
  --->  bankAccount = bank.getAccount(accountN);
        transactionProcess.withdraw (bankAccount, withdrawAmount);           

        break;  

      

-1


source







All Articles