2017-04-07 47 views
-2

這是一項家庭作業。我需要合併這兩個賬戶(acct2和acct3),並生成第三個賬戶名稱相同,賬號不同,價格爲200美元的賬戶。我也必須關閉前兩個賬戶。但這並不是真正的問題。如果我不聲明公共靜態帳戶accountConsolidate(Account acct1,Account acct2)作爲一個靜態方法,並且只是在main中創建一個對象,那麼我可以使一切正常工作。這不起作用,因爲我需要將此方法聲明爲靜態。此外,如果我確實聲明它是靜態的,我可以在if(acct1.name.equalsIgnoreCase(acct2.name) && acct1.acctNum != acct2.acctNum)中得到正確的返回值,如果我排除了其他明智的情況,它將返回null(「這兩個帳戶不能夠得到鞏固。請再次檢查標準」,不知道爲什麼。合併兩個賬戶

任何幫助將是巨大的。謝謝

import java.util.Random; 

    public class Account 
    { 
     private static int numAccounts = 0; 
     private double balance; 
     private static String name; 
     private static double acctNum; 
     static Random gen = new Random(); 

    //------------------------------------------------- 
    //Constructor -- initializes balance, owner, and account number 
    //------------------------------------------------- 
     public Account(double initBal, String owner, double number) 
     { 
      balance = initBal; 
      name = owner; 
      acctNum = number; 
      numAccounts++; 
     } 

     public Account(double initBal, String owner) 
     { 
      balance = initBal; 
      name = owner; 
      acctNum = Math.abs(gen.nextDouble()); 
      numAccounts++; 
     } 

     public Account(String owner) 
     { 
      balance = 0; 
      name = owner; 
      acctNum = Math.abs(gen.nextDouble()); 
      numAccounts++; 
     } 

    //------------------------------------------------- 
    // Checks to see if balance is sufficient for withdrawal. 
    // If so, decrements balance by amount; if not, prints message. 
    //------------------------------------------------- 
     public void withdraw(double amount) 
     { 
      if (balance >= amount) 
      { 
       balance -= amount; 
      } 
      else 
       System.out.println("Insufficient funds"); 
     } 

     public void withdraw(double amount, double fee) 
     { 
      if (balance >= amount) 
       { 
        balance -= amount; 
        balance -= fee; 
       } 
      else 
       System.out.println("Insufficient funds"); 
     } 

    public String getName() 
    { 
     return name; 
    } 

    public double getNum() 
    { 
     return acctNum; 
    } 

    //------------------------------------------------- 
    // Adds deposit amount to balance. 
    //------------------------------------------------- 
     public void deposit(double amount) 
     { 
      balance += amount; 
     } 

    //------------------------------------------------- 
    // Returns balance. 
    //------------------------------------------------- 
     public double getBalance() 
     { 
      return balance; 
     } 

    // Static method to keep track of incrementing Account 
     public static int getNumAccounts() 
     { 
      return numAccounts; 
     } 

    // Close the account 
     public void close() 
     { 
      balance = 0; 
      name = "CLOSED"; 
      numAccounts--; 
     } 


    // Consolidate accounts 
     public static Account accountConsolidate(Account acct1, Account acct2) 
     { 

      if(acct1.name.equalsIgnoreCase(acct2.name) && acct1.acctNum != acct2.acctNum) 
      { 
       Account Account2 = new Account(0, acct1.name); 
       Account2.balance = acct1.getBalance() + acct2.getBalance(); 
       acctNum = Math.abs(gen.nextDouble()); 

       acct1.close(); 
       acct2.close(); 
       return Account2; 

      } 
      else 
      { 
       System.out.println("These two accounts are not able to be consolidated. Please check the criteria again"); 
       return null; 
      } 
     } 

    //------------------------------------------------- 
    // Returns a string containing the name, account number, and balance. 
    //------------------------------------------------- 
     public String toString() 
     { 
      return "Name:" + name + 
       "\nAccount Number: " + acctNum + 
       "\nBalance: " + balance; 
     } 
    } 

//************************************************************ 
//TestAccounts1 
//A simple program to test the numAccts method of the 
//Account class. 
//************************************************************ 
import java.util.Scanner; 

    public class TestAccount1 
    { 
     public static void main(String[] args) 
     { 
      String name1; 
      String name2; 
      String name3; 

      Scanner scan = new Scanner(System.in); 

      System.out.print("Please enter the name for account 1: "); 
      name1 = scan.nextLine(); 
      Account acct1 = new Account (100, name1); 
      System.out.println(acct1); 
      System.out.println("Now there are " + Account.getNumAccounts() + " accounts"); 
      System.out.println(""); 

      System.out.print("Please enter the name for account 2: "); 
      name2 = scan.nextLine(); 
      Account acct2 = new Account (100, name2); 
      System.out.println(acct2); 
      System.out.println("Now there are " + Account.getNumAccounts() + " accounts"); 
      System.out.println(""); 

      System.out.print("Please enter the name for account 3: "); 
      name3 = scan.nextLine(); 
      Account acct3 = new Account (100, name3); 
      System.out.println(acct3); 
      System.out.println("Now there are " + Account.getNumAccounts() + " accounts"); 
      System.out.println(""); 

      acct1.close(); 
      System.out.println(""); 
      System.out.println("There are now " + Account.getNumAccounts() + " accounts"); 


      System.out.println("Accounts consolidated"); 
      System.out.println(Account.accountConsolidate(acct2, acct3)); 
} 
} 
+0

歡迎來到SO。你的具體問題是什麼? – c0der

+0

爲什麼我可以在不使用靜態方法的情況下使用對象而不是其他方式來執行此操作?另外,爲什麼它使用靜態,但只有當&& acct1.acctNum!= acct2.acctNum被省略時才起作用? – Nolan

回答

0

您的帳戶號碼是隨機生成的,但accNum是靜態的,所以每個帳戶將有創建的最後一個帳戶的帳號,因此acct1.acctNum != acct2.acctNum將永遠是fals即

您的帳戶名稱也是靜態的,因此每個帳戶都有最後創建的帳戶的帳戶名稱。

更改後,請閱讀您的編譯器錯誤。它會告訴你下一步該做什麼。考慮你將修改哪個對象的哪些變量。像acctNum = Math.abs(gen.nextDouble());將不會設置您的合併帳戶Account2的帳號。

+0

我沒有編譯問題。這就是我。帳戶1請輸入名稱:諾蘭 名稱:諾蘭 帳號:0.38784176303522233 餘額:100.0 現在有1個賬號 帳戶2請輸入名稱:諾蘭 名稱:諾蘭 帳號:0.884383874274763 平衡:100.0 現在有2個帳戶 帳戶3請輸入名稱:諾蘭 名稱:諾蘭 帳號:0.23193417654313297 餘額:100.0 現在有3個帳戶 療法e現在是2個賬戶 賬戶合併 這兩個賬戶無​​法合併。請再次檢查標準 null – Nolan

+0

將變量更改爲非靜態後您將會進行此操作。 – Obenland

+0

當我這樣做時它只是告訴我將acctNum更改回靜態,因爲「無法對非靜態字段acctNum進行靜態引用」我認爲這是因爲accountConsolidate方法是靜態的。也許我錯過了一些東西......我感謝你的時間 – Nolan