#java #java.util.scanner
Вопрос:
Я работаю над java-программой, которая в основном имитирует банковский счет для внесения депозитов, снятия средств, отображения баланса и т. Д. Я сделал почти все. Я просто застрял в одной части, которую нужно закончить. Программа спрашивает пользователя, каков начальный баланс и процентная ставка. Единственное, чего мне не хватает, так это того, что мне нужно отобразить сообщение о том, что учетная запись неактивна, когда баланс опускается ниже 25 долларов, что сделано. Теперь мне нужно сообщение о том, что учетная запись АКТИВНА, но только после того, как баланс опустился ниже 25, а затем вернулся выше 25. Каждый раз, когда я пробовал, он показывает активный каждый раз, когда баланс превышает 25, мне просто нужно, чтобы он отображался один раз после возвращения из неактивности, но я не могу придумать, как это сделать. Любые идеи будут оценены по достоинству, вот мой код:
///BankDemo class
import java.util.Scanner;
public class BankDemo {
@SuppressWarnings("unlikely-arg-type")
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
float startingBalance;
float interestRate;
String userInput;
System.out.print("Enter beginning balance :$");
startingBalance = keyboard.nextFloat();
System.out.print("Enter interest rate(whole number) :%");
interestRate = keyboard.nextFloat();
float bal = startingBalance;
float rate = interestRate;
BankAccount ba = new BankAccount(startingBalance, interestRate);
SavingsAccount sv = new SavingsAccount(bal, rate);
while(startingBalance > -1) {
System.out.println("Enter D for deposit" "nEnter W to Withdraw" "nEnter B for Balance"
"nEnter M for Monthly Process" "nEnter E to Exit");
userInput = keyboard.next().toLowerCase();
if("d".equals(userInput)) {
ba.deposit();
} else if("w".equals(userInput)) {
ba.withdraw();
} else if("b".equals(userInput)) {
ba.totalBalance();
} else if("m".equals(userInput)) {
ba.monthlyProcess();
} else {
System.out.print("Error, option not validn");
}
}
}
}
///BankAccount class
import java.util.Scanner;
public class BankAccount {
protected float balance;
protected float numDeposits;
protected float numWithdrawals;
protected float annualRate;
protected float monthlyServCharg;
float charge = 1;
public BankAccount(float startingBalance, float interestRate) {
balance = startingBalance;
annualRate = interestRate /= 100.0;
}
public void deposit() {
float valueD;
Scanner keyboard = new Scanner(System.in);
System.out.print("Enter the amount you want to deposit :$");
valueD = keyboard.nextFloat();
if(valueD < 0) {
System.out.println("Error: Must enter positive valuen");
}
balance = valueD;
numDeposits ;
}
public void withdraw() {
float valueW;
Scanner keyboard = new Scanner(System.in);
System.out.print("Enter the amount you want to withdraw :$");
valueW = keyboard.nextFloat();
if(valueW < 0) {
System.out.println("Error: Must enter positive valuen");
}
balance -= valueW;
numWithdrawals ;
if(balance < 25) {
System.out.print("Your balance is less than minimum balance. Your account is now INACTIVEn");
}
if(numWithdrawals > 4) {
balance --;
System.out.print("You have exceeded monthly limit of withdrawals. Fee of $1 chargedn");
}
}
public void totalBalance() {
System.out.printf("Your Balance is: %.2fn", balance);
}
public void calcInterest() {
float monRate = annualRate / 12;
float monInt = balance * monRate;
balance = monInt;
}
public void monthlyProcess() {
calcInterest();
balance -= monthlyServCharg;
numWithdrawals = 0;
numDeposits = 0;
monthlyServCharg = 0;
System.out.printf("Your Balance after Monthly process is: %.2fn", balance);
}
public void exit() {
totalBalance();
System.out.print("nThank you. Bye");
}
}
///SavingsAccount class
public class SavingsAccount extends BankAccount {
private boolean active;
public SavingsAccount(float bal, float rate) {
super(bal, rate);
if(bal < 25)
active = false;
else
active = true;
}
public void withdraw() {
if(active)
super.withdraw();
}
public void deposit(float amount) {
if(!active) {
if(amount balance < 25)
return;
}
super.deposit();
}
public void withdrawals() {
if(numWithdrawals > 4) {
monthlyServCharg = numWithdrawals - 4;
}
if(balance < 25)
active = false;
}
}
Ответ №1:
Вы показываете сообщения только в том случае, если active
статус меняется, т. е. когда вы деактивируете учетную запись:
if(balance < 25 amp;amp; active) {
System.out.print("Your balance is less than minimum balance. Your account is now INACTIVEn");
active = false;
}
И когда вы активируете его снова:
if( balance >= 25 amp;amp; !active) {
//print message here
active = true;
}
Для достижения этого в BankAccount
нем уже нужен active
флаг, который SavingsAccount
есть (тогда подклассу он не понадобится). Возможно, вы также захотите запретить вывод средств, если учетная запись не активна.
Комментарии:
1. Большое вам спасибо, это было очень полезно, теперь все работает.