【发布时间】:2014-11-03 14:49:34
【问题描述】:
我的任务的简要概述: 我应该编写一个使用我创建的帐户类的 ATM 类。 (accounts类包含方法,open——创建新账户,quit——退出当前账户,login——用户登录账户,存款,取款,获取余额,终止——突破无限环形)。我的 ATM 类必须跟踪所有打开的帐户,所以我想使用一个 account 类型的数组列表。但由于某种原因, .contains() 方法无法识别重复项,因此它不断添加已经存在的帐户,我不太确定如何解决此问题。这是我的代码: 谢谢 =)
我的账号类:
导入 java.util.ArrayList;
public class Account
{
public ArrayList<Account> accounts;
public static int NextAcctNo = 999;
private int accountNo;
private double balance;
public Account()
{ // constructor
balance = 0.0;
accountNo = ++NextAcctNo;
}
public void Open()
{
System.out.println("New account number: " + accountNo);
}
public void Quit()
{
System.out.println("Goodbye");
}
public void Login(int accountNo)
{
System.out.println("Hello");
this.accountNo = accountNo;
}
public void Deposit(double amount)
{ // method
balance += amount;
System.out.println("Deposited: " + amount);
}
public void Withdraw(double amount)
{ // method
balance -= amount;
System.out.println("Withdrew: " + amount);
}
public double Balance()
{ // method
System.out.println("Balance: " + balance);
return balance;
}
public void Terminate()
{
System.out.println("Terminated");
}
public int getAccountNo()
{ // method
return accountNo;
}
}//class Account
我的主要方法:
import java.util.Scanner;
import java.util.ArrayList;
public class ATM
{
// search for accounts for D, W, B
public static void main(String [] args)
{
ArrayList<Account> accounts = new ArrayList<Account>();
int counter = 0;
while (true)
{
Scanner commandScanner = new Scanner(System.in);
System.out.print("Enter a command - O, Q, L, D, W, B, T: ");
String command = commandScanner.nextLine();
if (command.equals("O") == true)
{
Account newAccount = new Account();
accounts.add(newAccount);
counter++;
newAccount.Open();
}
else if (command.equals("Q") == true)
{
if (accounts.size() == 0)
{
System.out.println("Error");
}
else
{
accounts.get(counter-1).Quit();
}
}
else if (command.equals("L") == true)
{
Scanner numberScanner = new Scanner(System.in);
System.out.println("Enter your account number: ");
int accountNo = numberScanner.nextInt();
Account temp = new Account();
temp.accountNo = accountNo;
if (counter == 0)
{
accounts.add(temp);
counter++;
}
else if (counter > 0)
{
if (accounts.contains(temp.accountNo) == true)
{
counter+=0;
}
else
{
Account newAccount = temp;
newAccount.Login(accountNo);
accounts.add(newAccount);
counter++;
System.out.println(accounts.size());
}
}
}
代码仍在进行中,我还没有全部发布 - 这就是为什么括号没有全部关闭的原因。
【问题讨论】:
-
您需要覆盖
Account类的hashcode和equals方法,以便ArrayList检测对象的重复实例 -
你可以使用'HashSet'概念来存储值。
-
在覆盖 hashcode 和 equals 之后,您可以使用 set,因为不会有数据重复。
标签: java oop arraylist duplicates contains