2012-12-11 35 views
0

所以我對java還是比較新的。我已經寫了這個,但我不確定爲什麼當我運行它時,金額將不會添加到客戶端中設置的值。Java程序沒有正確添加金額

例如:我輸入500作爲起始餘額,如果我打了押金,然後輸入500,然後打3,它應該說1000,但它仍然說500.然後如果我退出,它說我有-500。

任何想法?由於

package bankaccount; 
import java.util.Random; 
import java.util.Scanner; 

public class Client { 
public static void main(String args[]) { 
    Scanner input = new Scanner(System.in);  
    System.out.println("Enter your Name: "); 
      String cusName = input.nextLine(); 
      Random randomGenerator = new Random(); 
      int accNo = randomGenerator.nextInt(100000); 
      System.out.println("Enter Initial Balance: "); 
      int balance = input.nextInt(); 
      BankAccount b1 = new BankAccount(cusName, accNo, balance); 
      int menu; 
      System.out.println("Menu"); 
      System.out.println("1. Deposit Amount"); 
      System.out.println("2. Withdraw Amount"); 
      System.out.println("3. Display Information"); 
      System.out.println("4. Exit"); 
      boolean quit = false; 
      do { 
        System.out.print("Please enter your choice: "); 
        menu = input.nextInt(); 
        switch (menu) { 
        case 1:    
          System.out.print("Enter depost amount:"); 
          Money.amount = input.nextInt(); 
          b1.getDeposit(); 

          break; 

        case 2: 
          System.out.println("Current Account Balance=" + b1.getBalance()); 
          System.out.print("Enter withdrawal amount:"); 
          Money.amount = input.nextInt(); 
          b1.getWithdraw(); 

          break; 

        case 3: 
          b1.display(); 
          break; 
        case 4: 
          quit = true; 
          break; 
        } 
      } while (!quit); 
    } 

public class Money 
{ 

public static int accountNumber, balance=0; 
static int amount; 

static String name; 
public void setDeposit(int amount) { 

      balance = balance + amount; 
    } 
public int getDeposit() 
{ 

      balance = balance + amount; 
      if (amount < 0) { 
        System.out.println("Invalid"); 
      } 
            return 1; 

} 
public void setBalance(int b) 
{ 
    b = balance; 
} 
public int getBalance() 
{ 
    return balance; 
} 

public void setWithdraw(int amount) { 


      balance = balance - amount; 
    } 
public int getWithdraw() 
{ 
      balance = balance - amount; 
    if (balance < amount) 
    { 
        System.out.println("Not enough funds."); 
        return 1; 
      } 
      else if (amount < 0) { 
        System.out.println("Invalid"); 
        return 1;} 
        else 
          return 0; 
} 

import java.util.*; 

public class BankAccount extends Money { 
    static String name; 
    public static int balance, amount, acctNum; 
    Money customerMoney; 


    BankAccount(String name, int accNo, int bal) { 
      this.name = name; 
      this.acctNum = accNo; 
      this.balance = bal; 
      this.customerMoney = new Money(); 
    } 
      void display() { 
      System.out.println("Name:" + name); 
      System.out.println("Account No:" + acctNum); 
      System.out.println("Balance:" + balance); 

    } 

    void displayBalance() { 
      System.out.println("Balance:" + balance); 
    } 
    public Money getMoney(){ 
      return this.customerMoney; 
    } 
} 
+0

那麼,你如何真正把錢存入了'BankAccount'? –

+2

您是否嘗試過在調試器中運行它? – Collin

+3

國際海事組織,這種繼承是可能的。這並不真正遵循'基類IS父類'。銀行賬戶並不是真的錢。 – MikeTheLiar

回答

1

我會刪除所有您使用的public static int變量。這些都會引起混淆,因爲在程序執行過程中很難遵循它們的值。最好使用私有變量和公共方法將您的邏輯封裝到BankAccount中進行修改。

我個人會從您的代碼中消除Money類。這隻會導致混淆,並且您的簡化邏輯不是必需的。假設賬戶中存在一些任意數量的「金錢」,但實際上並沒有實際支持它的金錢 - (有點像現實生活中,只是屏幕上的數字吧?) - 在這種情況下,我們不需要Money類,只需int就可以得到我們的BankAccountbalance

沒有試圖讓你的基本功能太多的變化,我改寫爲以下兩類:

一個BankAccount類:

package banking; 

public class BankAccount { 

    /** 
    * The balance of this account. <br/> 
    * Assumes integer money (Floating point math is horrible and who really 
    * needs pesky pence or cents right?!) 
    */ 
    private int balance; 
    /** 
    * The account number 
    */ 
    private final int acctNum; 
    /** 
    * Name of the account holder 
    */ 
    private final String name; 

    /** 
    * Construct our basic account with an account number, account holder and 
    * starting balance. 
    * 
    * @param name 
    * @param accNo 
    * @param bal 
    */ 
    public BankAccount(String name, int accNo, int bal) { 
     this.name = name; 
     this.acctNum = accNo; 
     this.balance = bal; 
    } 

    /** 
    * Make a deposit to this account by adding a fixed sum to the existing 
    * balance. <br/> 
    * 
    * @param amount 
    */ 
    public void deposit(int amount) { 
     if (amount <= 0) { 
      throw new IllegalArgumentException("You cannot deposit zero or less"); 
     } else { 
      this.balance += amount; 
     } 
    } 

    /** 
    * Make a withdrawal from this account by subtracting a fixed amount from 
    * the existing balance. <br/> 
    * 
    * @param amount 
    */ 
    public void withdraw(int amount) { 
     if (amount > balance) { 
      throw new IllegalArgumentException("Insufficient Funds"); 
     } else if (amount <= 0) { 
      throw new IllegalArgumentException("You cannot withdraw zero or less"); 
     } else { 
      balance -= amount; 
     } 
    } 

    /** 
    * Get the account holder name. 
    * 
    * @return 
    */ 
    public String getName() { 
     return name; 
    } 

    /** 
    * Get the current account balance. 
    * 
    * @return 
    */ 
    public int getBalance() { 
     return balance; 
    } 

    /** 
    * Get the account identifier for this account. 
    * 
    * @return 
    */ 
    public int getAcctNum() { 
     return acctNum; 
    } 

    /** 
    * Debug print method. 
    */ 
    public void display() { 
     System.out.println("Name:" + name); 
     System.out.println("Account No:" + acctNum); 
     System.out.println("Balance:" + balance); 
    } 
} 

和主類:

package banking; 

import java.util.Random; 
import java.util.Scanner; 

public class BankMain { 

    public static void main(String args[]) { 
     Scanner input = new Scanner(System.in); 

     System.out.println("Enter your Name: "); 
     String customerName = input.nextLine(); 

     Random randomGenerator = new Random(); 
     int acctNo = randomGenerator.nextInt(100000); 

     System.out.println("Enter Initial Balance: "); 
     int balance = input.nextInt(); 

     BankAccount acct = new BankAccount(customerName, acctNo, balance); 

     System.out.println("Menu"); 
     System.out.println("1. Deposit Amount"); 
     System.out.println("2. Withdraw Amount"); 
     System.out.println("3. Display Information"); 
     System.out.println("4. Exit"); 

     boolean quit = false; 
     int menu; 
     do { 
      final int transaction; 
      System.out.print("Please enter your choice: "); 
      menu = input.nextInt(); 
      switch (menu) { 
       case 1: 
        System.out.print("Enter depost amount:"); 
        transaction = input.nextInt(); 
        acct.deposit(transaction); 
        break; 

       case 2: 
        System.out.println("Current Account Balance=" + acct.getBalance()); 
        System.out.print("Enter withdrawal amount:"); 
        transaction = input.nextInt(); 
        try { 
         acct.withdraw(transaction); 
        } catch (IllegalArgumentException iaEx) { 
         System.out.println(iaEx.getMessage()); 
        } 
        break; 

       case 3: 
        acct.display(); 
        break; 

       case 4: 
        quit = true; 
        break; 
      } 
     } while (!quit); 
    } 
} 

這是完美尚遠,但我覺得它更容易遵循其刪除靜態變量和Money類。

+0

謝謝,這幫助它向我展示了我在自己的代碼中犯了錯誤的地方! –

4

最大的問題是在聲明balance=0

public static int accountNumber, balance=0; 
           ^^^^^^^^^ 

當你要插入量每次,您的餘額是ZERO

你應該使用setDeposit(input.nextInt())

public void setBalance(int b)b = balance;應該已經balance = b;

而且,你amountbalance變量應該是Float而不是intbalance/amount可以23434.22

+0

我脫下餘額= 0,但它仍然不會更新的getDeposit總計的平衡。他們保持與第一個條目相同。但是,提款實際上取出了金額。 –

+0

@RickyMcQuesten:讓我檢查一下你的完整代碼... –

+0

@RickyMcQuesten:在'getDeposit()'中你可以打印餘額和金額前後行數'balance = balance + amount' –

0

代碼有許多問題,例如:你的任何領域都不應該是靜態的,但主要的是你有多個重複的領域。

例如在錢,你有

public static int accountNumber, balance=0; 
static int amount; 

static String name; 

和的BankAccount你有

static String name; 
public static int balance, amount, acctNum; 
Money customerMoney; 

,這意味着你有多個字段:namebalanceamount。一些代碼使用第一組字段,一些代碼使用第二組字段。您還有一個customerMoney,它不會直接更新。

爲了避免混淆,我建議你讓每個字段都是非靜態的,只在一個地方。刪除customerMoney,因爲您可能會使用它;)