1

割り当てられた無料取引数を超える銀行口座の取引ごとに手数料を差し引かなければならない宿題の問題があります。私の問題は、トランザクションが割り当てられた金額を超えた場合にのみ料金を適用するのでMath.maxdeductMonthlyChargeなく、プログラムがすべてのトランザクションに対して料金を請求しているということです。これを修正する方法がわかりません。また、毎月の取引回数をリセットすることになっています。これを行う方法がわかりません。誰かが私を正しい方向に向けることができれば、それは大歓迎です。

これが私の BankAccount コードです。

public class BankAccount
{  
   private double balance;
   private double fee;
   private double freeTransactions;
   private double transactionCount;

   public BankAccount()
   {   
      balance = 0;
      fee = 5;
      freeTransactions = 5;
      transactionCount = 0;
   }

   public BankAccount(double initialBalance)
   {   
      balance = initialBalance;
      transactionCount = 0;
   }

   public void deposit(double amount)
   {  
      double newBalance = balance + amount;
      balance = newBalance;
      transactionCount++;
   }

   public void withdraw(double amount)
   {   
      double newBalance = balance - amount;
      balance = newBalance;
      transactionCount++;
   }

   public double getBalance()
   {   
      return balance;
   }    

   public void setTransFee(double amount)
   { 
       balance = amount+(balance-fee);
       balance = balance;
   }

   public void setNumFreeTrans(double amount) 
   {
       amount = freeTransactions;
   }

   public double deductMonthlyCharge()
   {
       double transCount = Math.max(transactionCount, freeTransactions);
       double fee = 2.00 * (transCount - freeTransactions);
       return fee;
   }
}

これが私の BankAccountTester コードです。

public class BankAccountTester
    {
        private BankAccount rockdown;
        public static void main(String[] args) {
            BankAccount rockdown = new BankAccount(1000.0);
            rockdown.deposit(1000);
            rockdown.withdraw(500);
            rockdown.withdraw(400);
            rockdown.deposit(200);
            System.out.println(rockdown.getBalance()- rockdown.deductMonthlyCharge());

            rockdown.deposit(1000);
            rockdown.withdraw(500);
            rockdown.withdraw(400);
            rockdown.deposit(200);
            rockdown.deposit(500);
            System.out.println(rockdown.getBalance()- rockdown.deductMonthlyCharge());

            rockdown.deposit(1000);
            rockdown.withdraw(500);
            rockdown.withdraw(400);
            rockdown.deposit(200);
            rockdown.deposit(500);
            rockdown.withdraw(1000);
            System.out.println(rockdown.getBalance()- rockdown.deductMonthlyCharge());
        }
    } 
4

4 に答える 4

3

デフォルト以外のコンストラクターでを設定することはないため、デフォルトはfreeTransactions次のようになります。0

public BankAccount(double initialBalance) 

次のように、オーバーロードされたコンストラクターからデフォルトのコンストラクターを呼び出すことができます。

public BankAccount(double initialBalance) {   
   super();
   balance = initialBalance;
}

ステートメントfreeTransactions = 5;が呼び出されるようにします。

于 2012-12-26T18:10:24.987 に答える
2

コンストラクターの 1 つから数行が抜けています。

   public BankAccount()
   {   
      balance = 0;
      fee = 5;
      freeTransactions = 5;
      transactionCount = 0;
   }

   public BankAccount(double initialBalance)
   {   
      balance = initialBalance;
      fee = 5;
      freeTransactions = 5;
      transactionCount = 0;
   }
于 2012-12-26T18:12:44.077 に答える
0

数学を使う代わりに、このように書きます。

if (transactionCount <= freeTransactions)
   return 0;
return 2 * (transactionCount - freeTransactions);
于 2012-12-26T18:37:54.860 に答える
0

Math.max(a,b)は正しく、大きい方の値を返します。計算する手数料がある場合は、手数料のみを計算するように方法を変更して、無料のトランザクションが残っていないことをお勧めします。

ところで。宣言または作成時に設定する必要がありますfreeTransactionsfee

public double deductMonthlyCharge()
   {
       double transCount = Math.max(transactionCount, freeTransactions) - freeTransactions;
       double fee = 0;
       if (transCount > 0) fee = 2.00 * transCount;
       return fee;
   }

それとも私が間違っていますか?

于 2012-12-26T18:16:04.460 に答える