簡體   English   中英

在不使用uuid的專用方法createaccountID()中創建唯一ID

[英]create Unique id in a private method createaccountID() without using the uuid

每次創建帳戶時,私有的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;
    }
}

任何幫助表示贊賞

您可以將“計數器”起始值設置為1000,並將其連接為“ A”字符以在“ accountID”中設置。

為了確保沒有重復,可以使用Set界面。 例如,私有靜態字段中的HashSet實現。

另一個變體是使用TreeSet並使用其last()方法獲取最新的ID。 這樣就可以避免使用計數器。 例如,您可以存儲一個值為'1000'的起始計數器,並使用treeSet.last()將其遞增,然后存儲結果。

另外,我不確定您為什么需要公共createAccountID()。 這是應該封裝在類內部的東西,不應在外部調用。

在getter方法中,將您的accountID字段更改為int並連接為“ A”也許是有意義的。

//或者,也許您只需要一個起始值為'1000'的靜態計數器,然后調用構造函數即可:

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

如果不涉及多個線程,則使用靜態計數器將確保沒有重復。

如果有多個線程,則可以使用AtomicInteger 在這種情況下,請確保首先使用遞增AndGet (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;
}

請注意,如@Michael Cheremukhin所述,createID方法應為私有。

創建一個靜態變量計數器,將其連接為A並遞增。 保持函數私有,您不應該在課外調用它。

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

 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM