2013-04-07 114 views
2

我试图自动为客户生成一个ID, 并且我每次都得到0。自动生成ID

很确定问题出在public void regCustomer()

public class User { 
private String firstName, gender, age; 
String surename; 
private int customerID; 
private static int idCounter = 1000; 
User next; 

public User(String fN, String sn, String g, String a) { 
    firstName = fN; 
    surename = sn; 
    gender = g; 
    age = a; 
    //customerID = cID; 
    next = null; 
} 

public void setCustomerID() { 
    customerID = idCounter++; 
} 

public int getCustomerID() { 
    return customerID; 
} 

public String toString() { 
    return customerID + "\t" + surename + "\t" + firstName + "\t" + age 
      + "\t" + gender; 

} 

}

Window

public void regCustomer() { 


    //int customerID = 0;//= Integer.parseInt(customerIDField.getText()); 
    String firstName = firstNameField.getText(); 
    String surename = surenameField.getText(); 
    String gender = genderField.getText(); 
    String age = ageField.getText(); 

    if (!firstName.equals("") && !surename.equals("") && !gender.equals("")&& !age.equals("")) { 
     userA.regCustomer(new User(firstName, surename, gender,age)); 
     User u = new User(firstName, surename, gender,age); 
     u.getCustomerID(); 
     customerIDField.setText(""); 
     firstNameField.setText(""); 
     surenameField.setText(""); 
     ageField.setText(""); 
     genderField.setText(""); 
     firstNameField.requestFocus(); 
    } else 
     JOptionPane.showMessageDialog(this, "Alle felt må fylles inn"); 
} 
+2

你似乎有一个你永远不会调用的'setCustomerID()'方法。所以大概'int'的默认值为0. – 2013-04-07 18:21:32

+0

问题是,每次程序注册一个新客户时,它都会得到客户ID:0。我希望它在1000 ++上启动 – user2248471 2013-04-07 18:23:10

回答

1

移动customerID = idCounter++;的构造。

+0

值得指出的是, 'AtmoicInteger'应该用作'int ++'并不保证是线程安全的。 – 2013-04-07 18:26:13

+0

确实如此,但不知何故,我认为OP在开始思考多线程之前还有很长的路要走。当我处于这个阶段时,像你这样的答案(虽然是正确的)并不是很有帮助,因为他们依赖于我无法将头围绕的逻辑。 – drewmoore 2013-04-07 18:31:34

+0

我做到了。现在唯一的问题是,每当我重新打开程序时,客户都会得到不同的ID .. – user2248471 2013-04-07 19:00:20

3

你从来没有设置ID,这就是为什么它是零。

您可以使用private static final AtomicInteger来生成您的ID序列;简单地从它在构造函数阅读:

private static AtomicInteger ID_GENERATOR = new AtomicInteger(1000); 

public User(String fN, String sn, String g, String a) { 
    customerID = ID_GENERATOR.getAndIncrement(); 
    //rest of constructor 
} 

您应该使用AtmoicInteger因为这是线程安全和getAndIncrement方法是原子。 int没有这样的保证。

需要回答的问题是这些项目是否以任何方式持续存在,如果是这样,那么会发生什么 - 使用这种技术,ID生成总是从1000开始。