2013-04-09 105 views
0

我有这四个类。 我想要做的是通过使用customerID向“用户”添加“Liftcard”。这是我到目前为止,但它似乎并没有工作。我很确定问题出在窗口类的public void regLiftCard()方法中。任何人都知道我应该怎么做? (即时通讯使用的ArrayList)将两个对象相互连接

用户类:

public class User implements Serializable { 
private String surename, firstName, gender, age; 
private int customerID; 
public LiftCard liftCard; 
User next; 

同一类:

public LiftCard getLiftCard(){ 
    return liftCard; 
} 

public void setLiftCard(LiftCard liftC){ 
    liftCard = liftC; 
} 

窗口类:

 public void regLiftCard() 
    { 
     int cardtype = Integer.parseInt(cardTypeField.getText()); 
     int customerID = Integer.parseInt(findCustomerField.getText()); 

     if(cardtype == 1 || cardtype == 2 || cardtype == 3 || customerID != 0) 
     { 
      //JOptionPane.showMessageDialog(this, "Du må fylle inn hvilket kort du skal ha 1/2/3"); 

     try 
     { 
      User uu = userA.findById(customerID); 
      if (uu != null) { 
       if (uu.getLiftCard() != null) { 
        JOptionPane.showMessageDialog(this, "Kunden har allerede kort"); 
       } 

      } 
      String fornavn = firstNameField.getText(); 
      String etternavn = surenameField.getText(); 
      String alder = ageField.getText(); 
      String kjonn = genderField.getText(); 
      LiftCard c = new LiftCard(cardNumber, cardtype); 
      if (userA.findByCardNumber(cardNumber) == null) { 
       uu.setLiftCard(c); 
      } else { 
       uu = new User(customerID, fornavn, etternavn, alder, kjonn); 
      } 
      JOptionPane.showMessageDialog(this, "Nytt kort/kunde er registrert"); 

     } catch (NumberFormatException e) { 
      JOptionPane.showMessageDialog(this, "Feil i nummerformat!"); 
     } 
     } 
    } 

UserArchive类:

public void regLiftCard(User u) { 
    list.add(u); 
} 

Liftcard类:

private int cardNumber, cardType; 

public LiftCard(int cN, int cT) 
{ 
    cardNumber = cN; 
    cardType = cT; 
} 

public int getCardNumber(){ 
    return cardNumber; 
} 

public int getcardType(){ 
    return cardType; 
} 

public String toString() 
{ 
    return cardNumber + "\t" + cardType; 
} 

}

+3

定义“不起作用”。到目前为止,它只是一个代码转储,对预期或实际行为的解释为零。不相关,但考虑与格式,支撑位置等一致。 – 2013-04-09 14:10:28

+0

考虑将'liftCard'字段设置为'private'和'final',并将其设置在'User'类的构造函数中。 – 2013-04-09 14:12:41

+0

对不起,我真的很新。我打电话给regLiftCard时要做的是将新卡分配给用户。所以如果我打印我的顾客名单,它会说这样的:customerID有LiftcardID。我吮吸解释,对不起。 – user2248471 2013-04-09 14:16:10

回答

0

我想你想注册一个卡一个唯一的用户,等等regListCard:

你正在寻找一个用户。 如果用户不为空,则查找它的卡。 如果该卡不为空,则表示该用户已拥有卡。 然后,您将获得有关用户和卡片的所有属性输入。 然后,你创建一张卡片。 然后,使用此卡搜索用户,并将此前创建的卡设置为此用户。 但是,你分配这张卡的用户有可能是空的,因为你正在通过它的名片寻找一个用户,如果它是空的,你将这张卡分配给他,如果他是空的,这是不可能的,似乎这是问题所在。 然后,如果没有用户使用此卡,您正在实例化新的用户,但不分配任何卡。

所以,把这个:

else { 
      uu = new User(customerID, fornavn, etternavn, alder, kjonn); 
      uu.setLiftCard(c); 
     } 

在此之后:

if (uu != null) { 
      if (uu.getLiftCard() != null) { 
       JOptionPane.showMessageDialog(this, "Kunden har allerede kort"); 
      } 

和之前的 “如果” 获得的输入。尝试一下并告诉我们它是如何工作的,如果我不理解你的代码,那么很抱歉。

+0

我认为你在现场遇到了我的问题。所以我尝试了你说的,但用户卡号仍然是空的。 – user2248471 2013-04-09 14:54:45

+0

哦,我看不到你正在初始化cardNumber的位置,它是一个Window class字段吗?检查你是否给它一个不是0的值,否则。无论如何,我忘了告诉你,当你创建新的用户时,你也必须设置该卡,所以得到的代码将是: else else {new User(customerID,fornavn,etternavn,alder,kjonn) ; uu.setLiftCard(c); } – 2013-04-09 16:11:39

+0

我编辑了一个应该工作的解决方案的代码 – 2013-04-09 16:15:03