2014-09-05 46 views
1

我正在创建一个银行程序和hava类Account(摘要),SavingsAccountCustomer(等等)。当我创建一个新的savingsaccount我想为每个帐户获取一个ID。我的问题是我无法弄清楚如何让ID独特。获取唯一的id银行程序java

我还缺少什么?我怎样才能为客户和账户使用ArrayList?还有其他建议吗?这对我来说非常困难,但我努力学习和理解。

在银行类中,我创建了几个客户c1和c2。然后,我为客户c1创建两个帐户。

public class Bank { 
    public static void main(String[] args) { 

    ArrayList<Customer> customerList = new ArrayList<Customer>(); 
    ArrayList<Account> accountList = new ArrayList<Account>(); 

    Customer c1 = new Customer("John"); 
    Customer c2 = new Customer("Sam");   

    SavingsAccount a1 = new SavingsAccount(c1); 
    SavingsAccount a2 = new SavingsAccount(c1); 

    customerList.add(c1); 
    customerList.add(c2);    

    accountList.add(a1); 
    accountList.add(a2); 
    } 
} 

帐号等级:

public abstract class Account { 
    protected int balance; 
    protected int id; 
    protected double interest; 
    protected Customer name; 

    public Account() {} 

    public Account(Customer name) { 
    this.name = name; 
    } 

    public abstract void deposit(int amount); 

    public abstract void withdraw(int amount); 

    public abstract int getBalance(); 

    public abstract void transfer(int amount, Account account); 
} 

在类SavingsAccount:

public class SavingsAccount extends Account{ 
    public SavingsAccount() { 
     super(); 
    } 

    SavingsAccount(Customer person) { 
     name = person; 
     id = (int) Math.floor(Math.random()*101); //This won't generate a unique number for each savingsaccount 
    } 
} 
+0

如果你不存储你的uid在一个窗体中(如Vaishak Suresh的发音答案#1)它不能保证是一个唯一的ID - 这不太可能,但不能保证 - 但如果你只是为了练习而编写代码,那么你可以使用简单的文本文件而不是数据库(在这种情况下,UUID会适合你......所以不要介意我的提示...... – 2014-09-05 19:37:42

回答

2

你在做的代码是获得一个伪随机数在0到101的范围内。这样做n请确保数字不会重复。一些方法,以确保唯一的ID代是

  1. 如果您正在使用的数据库,具有由数据库
  2. 有在你每次分配一个ID时间增加代码的静态变量生成一个自动增量数
  3. 编写某种形式的哈希函数,该函数根据Customer对象生成一个整数ID。
  4. 使用UUID也可以生成唯一的ID。这也可以让你随机计算它,并获得散列ID等
+0

谢谢。起初我有一个想法,在列表中保存1-100的数字,然后(以某种方式)从我将尝试你的第二个建议 – user2939293 2014-09-05 19:19:39

+1

5.使用一个简单的密码来加密0,1,2,3 ......等等。因为密码是可逆的他的输出保证对于独特的输入是唯一的。 – rossum 2014-09-07 16:28:48

+0

我不认为#3是一个选项,即使接受(要求?)相同的ID以获得相同的“客户对象”:散列函数不要求是内射的,并且通常不需要标准映射将无限输入映射到有限集合的价值观 - 认为生日悖论。 – greybeard 2014-10-28 09:12:23

0

Ofcourse数学随机给你一个随机数,但不是唯一的...使用UUID.randomUUID()。 toString()

+0

好的,我会尝试了解UUID.randomUUID()。toString()。 谢谢 – user2939293 2014-09-05 19:21:36