合并两个账户

问题描述:

这是一项家庭作业。我需要合并这两个账户(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

您的帐户号码是随机生成的,但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