在私有方法createaccountID()中创建唯一ID,而不使用uuid

时间:2013-06-06 21:07:17

标签: java unique-id

私有createAccountID()方法应在每次创建帐户时创建新的唯一ID,即创建的第一个帐户将具有ID “A1000”。每个新帐户的帐户ID将增加1,即第二个 将有ID“A1001”等,不应有任何重复。

我不确定如何启动此方法,除了我创建了一个名为counter的静态变量,该变量设置为0.我认为我必须使用.equals()方法或其他东西来确保第一个不等于新的那个,它会打印一个错误信息(“复制”)

我也不确定是否要使用public void createAccountID()或。{                                       public String createAccountID()

以下是代码:

public class Account
{
    private Customer customer;
    private String accountID;
    private double balance;
    private static int counter = 0;
    private static final double OPENING_BALANCE = 0.0;


    public Account()
    {
        setCustomer(new Customer());
        setBalance(OPENING_BALANCE);
        createAccountID();
    }

    public Account(Customer theCustomer, double theBalance)
    {
        setCustomer(theCustomer);
        setBalance(theBalance);
        createAccountID();
    }  

    private void createAccountID()<------------------------------------------------
    {
        accountID = "A";
        for(counter = 0; counter >= 0; ++counter){
            accountID+=counter;//stuck in loop doesnt work.
                                //just thought id try it
        }
    }

    public void setCustomer(Customer theCustomer)
    {
        if(theCustomer == null){
            customer = new Customer();
        }
        else{
            customer = theCustomer;
        }
    }

    public Customer getCustomer()
    {
        return customer;
    }

    public void setBalance(double theBalance)
    {
        if(theBalance <= OPENING_BALANCE){
            System.out.println("Error. No Negative values");
        }
        else{
            balance = theBalance;
        }

    }

    public double getBalance()
    {
        return balance;
    }
}

任何帮助赞赏干杯

3 个答案:

答案 0 :(得分:1)

您可以将“计数器”起始值设置为1000并将其连接到“A”字符以在“accountID”中设置。

为了确保没有重复项,您可以使用Set接口。例如,私有静态字段中的HashSet实现。

另一种变体是使用TreeSet并使用其last()方法来获取最新的ID。然后你可以避免使用计数器。例如,您可以存储值为“1000”的起始计数器,并使用treeSet.last()递增它,然后存储结果。

另外,我不确定为什么你需要一个公共的createAccountID()。这是应该在你的类中封装的东西,不应该在外部调用。

将getID字段更改为int并在getter方法中连接到'A'可能是有意义的。

// 或者你可能只需要一个起始值为'1000'的静态计数器,然后调用构造函数:

this.accountID = 'A' + counter++;

答案 1 :(得分:0)

如果没有涉及多个线程,使用静态计数器将确保没有重复。

如果有多个线程,您可以使用AtomicInteger。在这种情况下,请确保首先使用incrementAndGet(1)增加AtomicInteger,然后创建ID:

private static final AtomicInteger counter = new AtomicInteger(1000);
private static final String PREFIX = "A";

private String accountID;

private void createID() {
    final int number = counter.incrementAndGet(1);
    accountID = PREFIX + number;
}

请注意,createID方法应该是私有的,如@Michael Cheremukhin所述。

答案 2 :(得分:0)

创建一个静态变量计数器,将其连接到A并递增它。保持你的功能私密,你不应该在课外打电话。

private void createAccountID()
 {
        accountID = "A" + counter++;

 }