Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 合并两个帐户_Java - Fatal编程技术网

Java 合并两个帐户

Java 合并两个帐户,java,Java,这是一个家庭作业。我需要合并两个帐户(acct2和acct3),并生成第三个帐户,该帐户具有相同的名称、不同的帐号和200美元。我还必须关闭前两个帐户。但这并不是真正的问题。如果我不将publicstaticaccountconsolidation(accountacct1,accountacct2)声明为静态方法,而只是在main中创建一个对象,那么我可以让一切正常工作。但这不起作用,因为我需要将此方法声明为静态。另外,如果我将其声明为静态,我可以在if(acct1.name.equalsIg

这是一个家庭作业。我需要合并两个帐户(acct2和acct3),并生成第三个帐户,该帐户具有相同的名称、不同的帐号和200美元。我还必须关闭前两个帐户。但这并不是真正的问题。如果我不将publicstaticaccountconsolidation(accountacct1,accountacct2)声明为静态方法,而只是在main中创建一个对象,那么我可以让一切正常工作。但这不起作用,因为我需要将此方法声明为静态。另外,如果我将其声明为静态,我可以在
if(acct1.name.equalsIgnoreCase(acct2.name)&&acct1.acctNum!=acct2.acctNum)
中获得正确的返回值,如果我排除 `&&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));
}
}

您的帐号是随机生成的,但是
accNum
是静态的。因此,每个帐号都将具有上一个帐号的创建帐号。因此
acct1.acctNum!=acct2.acctNum
将始终为false

您的帐户名也是静态的,因此每个帐户都具有上次创建的帐户名


更改此选项后,请阅读编译器错误。它将告诉您下一步要做什么。请考虑要修改哪个对象的哪些变量。例如
acctNum=Math.abs(gen.nextDouble())
不会设置合并账户的账号
Account2

欢迎使用SO。您的具体问题是什么?为什么在没有静态方法的情况下,我可以使用对象而不是相反的方式执行此操作?另外,为什么使用静态方法工作,但只有在省略了&acct1.acctNum!=acct2.acctNum时才可以?我没有请输入帐户名称1:nolan名称:nolan帐户编号:0.38784176303522233余额:100.0现在有1个帐户请输入帐户名称2:nolan名称:nolan帐户编号:0.884383874274763余额:100.0现在有2个帐户请输入帐户名称3:nolan名称:nolan帐号:0.23193417654313297余额:100.0现在有3个帐户,现在有2个帐户合并了这两个帐户无法合并。请再次检查条件。将变量更改为非静态后,您将为空。当我这样做时,它只会告诉我将acctNum更改回静态,因为“无法对非静态字段acctNum进行静态引用"我想这是因为accountConsolidate方法是静态的。也许我遗漏了一些东西…我很感激您的timeCorrect。但是这个变量属于谁?属于
acct1
acct2
Account2
或其他对象?编译器不知道,因为静态方法不属于对象。所以您有使用应该更改其变量的正确对象。你是个天才!很抱歉出现这样的问题。谢谢你的帮助!