Как мне сложить и вычесть числа в массиве (в моем конкретном состоянии)?

В моем банковском приложении пользователи могут создавать несколько учетных записей. Теперь я добавляю дополнительную функцию, чтобы она могла выполнять транзакции в разных учетных записях, а также в одной учетной записи. В данный момент, в сумме, я понятия не имею, как это сделать.

Специально: учитывая блок кода, который я дал ниже, как только withdraw_accNum находится в списке массивов, withdraw_amount должны быть вычтены из текущего баланса withdraw_accNum , И после этого это значение должно быть добавлено к текущему балансу deposit_accNum , И, конечно, массив должен быть обновлен в соответствии с транзакцией, которую я сделал, чтобы он мог отображаться с последним статусом. case 2: Следует также следовать этим основным правилам.

Это мой полный код для этого приложения:

BankApp_Assignment:"

    package bankapp_assignment;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class BankApp_Assignment {

    static int numOfAcc = 0;

    public static void main(String[] args) {
        System.out.println("WELCOME TO OUR BANK!\n\n");

        List<BankAccount> bankAccounts = new ArrayList<BankAccount>();
        Scanner sc = new Scanner(System.in);

        int option1;
        int option2;
        double withdraw_accNum;
        double deposit_accNum;

        double withdraw_amount;
        double dep_amount;

        while (true) {
            System.out.println("Choose your option:\n"
                    + "1. Create new account\n"//done
                    + "2. Deposit/withdraw\n"//working with this...
                    + "3. View One account\n"//not used yet
                    + "4. Deleting an account\n"//not used yet
                    + "5. View all the accounts\n"//done
                    + "6. Quit\n");//done
            System.out.println("*************\n"
                    + "************");

            option1 = sc.nextInt();
            sc.nextLine();
            //switch-case starts
            switch (option1) {
                case 1:
                    //create account
                    BankAccount bankAcc = new BankAccount();
                    System.out.println("Enter Full Name:");
                    bankAcc.setName(sc.nextLine());
                    System.out.println("Choose an Account Number:");
                    bankAcc.setAccNum(sc.nextInt());
                    System.out.println("Choose the initial amount:");
                    bankAcc.setInitiateAmount(sc.nextDouble());
                    //adding those into the arrayList
                    bankAccounts.add(bankAcc);
                    System.out.println("-------------\n"
                            + "-------------");
                    break;
                case 2:
                    //First displaying the current accouns info
                    System.out.println("Name \tAccount No \tInitial Amount");
                    for (BankAccount bankAccount : bankAccounts) {

                        System.out.println(bankAccount);

                    }

                    System.out.println("\t\t.........\n"
                            + "\t\t.........");

                    System.out.println("To transfer money within the bank accounts enter 1\n"
                            + "To deposit/withdraw money in the same account enter 2");
                    option2 = sc.nextInt();
                    sc.nextLine();

                    //inner switch-case starts
                    switch (option2) {
                        case 1:

                            System.out.println("Enter the account number you want to withdraw from:");

                            withdraw_accNum = sc.nextDouble();

                            System.out.println("Enter the amount you want to withdraw:");

                            withdraw_amount = sc.nextDouble();

                            System.out.println("Enter the account number you want to deposit to:");

                            deposit_accNum = sc.nextDouble();//the deposit amount is alwyas the same as withdraw_amount

                            break;
                        case 2://deposit/withdraw money in the same accounts
                            System.out.println("Enter the account number you want to deposit or withdraw from:");
                            //read the accNum
                            System.out.println("Enter the amount (To withdraw enter a negative value)");
                            //read the amount
                            break;
                    }

                    //inner switch-case ends
                    System.out.println("\n\n");
                    break;

                case 3:
                //View One account
                case 4:
                //Deleting an account

                case 5:
                    //View all the accounts/printing them out
                    System.out.println("Name\tAccount No\tInitial Amount");
                    for (BankAccount bankAccount : bankAccounts) {

                        System.out.println(bankAccount);

                    }

                    System.out.println("\n\n");
                    break;

                case 6:
                    //Quit
                    return;
            }

            //switch-case ends
        }

    }

}

Банковский счет:

package bankapp_assignment;

public class BankAccount {

    private String name;
    private int accNum;
    private double initiateAmount;

    //constructor
    public BankAccount() {

        this.name = null;
        this.accNum = 0;
        this.initiateAmount = 0;

    }

    public void setName(String name) {
        this.name = name;

    }

    public void setAccNum(int accNum) {

        this.accNum = accNum;
    }

    public void setInitiateAmount(double initiateAmount) {
        this.initiateAmount = initiateAmount;
    }

    @Override
    public String toString() {
        return name + "\t\t" + accNum + "\t\t" + initiateAmount;
    }

}

2 ответа

Вместо того, чтобы держать ArrayList из BankAccount, держать HashMap с ключом в качестве номера счета и значением в качестве объекта BankAccount.

Map<int, BankAccount> bankAccounts = new HashMap<int, BankAccount>();

когда вы добавляете аккаунт, просто

bankAccounts.put(accNum, bankAccount);

и когда вы хотите вычесть сумму вывода

BankAccount bankAccount = bankAccounts.get(accNum);

и тогда вы можете манипулировать amount используя его setters а также getters,

Специально: учитывая блок кода, который я привел ниже, после того, как в списке массивов будет найдено изъятие изъятия_символа, необходимо вычесть из текущего остатка баланса изъятия_озаменителя. И после этого это значение должно быть добавлено к текущему балансу deposit_accNum. И, конечно, массив должен быть обновлен в соответствии с транзакцией, которую я сделал, чтобы он мог отображаться с последним статусом. Случай 2: следует также следовать этим основным правилам.

Проверить правильность введенного номера банковского счета при выводе достаточно просто. Я думаю, у вас нет проблем с этим. Вы можете просто пройтись по всем элементам массива и проверить, совпадает ли accNum каждого банковского счета с данным номером счета.

Управлять элементами массива очень просто.

  1. Получите ссылку на объект банковского счета, которым вы хотите манипулировать.

    BankAccount b, acc = null;
    for(int x=0; x<bankAccounts.size(); x++){
        b = bankAccounts.get(x);
        if(givenAcc == b.getAccNum())
            acc = b;;
    }
    
  2. Если счет существует, вычтите деньги с этого счета

    //Assume user already input amount to withdraw
    
    if(acc != null) //if account exist
        b.deductAmount(amt);
    else
        System.out.println("Account does not exist");
    

Это все. Это очень просто. Просто в одну строчку.

Я советую вам модулировать ваши основные в под-методы. Похоже, в вашем классе Bank Account также отсутствуют многие методы мутатора и аксессора.

Желательно иметь deductAmount(double amt) метод вычета суммы денег.

Другие вопросы по тегам