简体   繁体   中英

Removing element from TreeMap

I am creating project that allows users to create, delete etc bank accounts. I have been struggling with case 3 (remove method). I want the user to enter the account ID which will remove it from the treemap. How should the method be laid out?

package mainsample;
import java.util.*;

public class MainSample {


  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();
          bank.removeAccounts(bankProcess.removeAccount(bank.getAccounts(), bankAccount));
          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);

          System.out.println(depositAmount + " has been deposited.");
          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);

          System.out.println(withdrawAmount + " has been withdrawed.");
          break;


        case 6:
          System.out.println("[6] Print Transaction has been selected");
          System.out.println("Enter account ID: ");
          int accountN = scan.nextInt();



          break;






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

      }

    }
  }
}

/*
 * 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's 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's name: " + holderName + "\nHolder's address: " + holderAddress + "\nOpen Date: " + openDate + "\nCurrent balance: " + currentBalance;
  }


}

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


}

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




}

you have to get bankAccount first by accountNo you are getting from console because your removeAccount method in BankProcess expects BankAccount object for removal.

try this

 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));
      break;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM