2013-04-09 235 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