0

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

我不太确定如何启动这个方法,除了我创建了一个名为 counter 的静态变量,它设置为 0。我想我必须使用一种.equals()方法或其他方法来确保第一个不等于新的否则它将打印一个错误消息,如 ("Duplicate")

我也不确定是去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;
    }
}

任何帮助表示感谢干杯

4

3 回答 3

1

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

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

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

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

也许将您的 accountID 字段更改为 int 并在 getter 方法中连接到“A”是有意义的。

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

this.accountID = 'A' + counter++;
于 2013-06-06T21:40:46.910 回答
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;
}

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

于 2013-06-06T21:54:35.143 回答
0

创建一个静态变量 counter,将其连接到 A 并递增它。保持你的函数私有,你不应该从你的班级之外调用它。

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

 }
于 2013-06-06T21:59:46.713 回答