Как мне сложить и вычесть числа в массиве (в моем конкретном состоянии)?
В моем банковском приложении пользователи могут создавать несколько учетных записей. Теперь я добавляю дополнительную функцию, чтобы она могла выполнять транзакции в разных учетных записях, а также в одной учетной записи. В данный момент, в сумме, я понятия не имею, как это сделать.
Специально: учитывая блок кода, который я дал ниже, как только 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 каждого банковского счета с данным номером счета.
Управлять элементами массива очень просто.
Получите ссылку на объект банковского счета, которым вы хотите манипулировать.
BankAccount b, acc = null; for(int x=0; x<bankAccounts.size(); x++){ b = bankAccounts.get(x); if(givenAcc == b.getAccNum()) acc = b;; }
Если счет существует, вычтите деньги с этого счета
//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)
метод вычета суммы денег.