как сделать сообщение, которое отображается только после возвращения из неактивности

#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. Большое вам спасибо, это было очень полезно, теперь все работает.