Java 合并两个帐户
这是一个家庭作业。我需要合并两个帐户(acct2和acct3),并生成第三个帐户,该帐户具有相同的名称、不同的帐号和200美元。我还必须关闭前两个帐户。但这并不是真正的问题。如果我不将publicstaticaccountconsolidation(accountacct1,accountacct2)声明为静态方法,而只是在main中创建一个对象,那么我可以让一切正常工作。但这不起作用,因为我需要将此方法声明为静态。另外,如果我将其声明为静态,我可以在Java 合并两个帐户,java,Java,这是一个家庭作业。我需要合并两个帐户(acct2和acct3),并生成第三个帐户,该帐户具有相同的名称、不同的帐号和200美元。我还必须关闭前两个帐户。但这并不是真正的问题。如果我不将publicstaticaccountconsolidation(accountacct1,accountacct2)声明为静态方法,而只是在main中创建一个对象,那么我可以让一切正常工作。但这不起作用,因为我需要将此方法声明为静态。另外,如果我将其声明为静态,我可以在if(acct1.name.equalsIg
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
或其他对象?编译器不知道,因为静态方法不属于对象。所以您有使用应该更改其变量的正确对象。你是个天才!很抱歉出现这样的问题。谢谢你的帮助!