2013-04-08 30 views
0

我的代碼是一個簡單的郵件系統。該系統由四類:爲什麼我在Java中更改類時丟失了存儲的數據

  • 列表項
  • 用戶
  • 用戶(主類)
  • 電子郵件組

我的問題是關於上三個班。在我的代碼將從Users類開始,彈出一個菜單,您可以添加,刪除系統爲LinkedList。在菜單中還有一個使用選項,它將從系統中選擇一個現有用戶並彈出位於用戶類別中的另一個菜單。在這個類中,還有另一個LinkedList特定用戶擁有的電子郵件。在新菜單中還有選擇,如列出電子郵件,閱讀電子郵件和發送電子郵件。我的問題從這裏開始。我可以發送消息並且不能列出消息。如果我在User類中調用look()方法,它將顯示0條消息,但如果在主類中調用它,則會顯示消息。請提供一些關於此的建議。謝謝。

我的代碼: 用戶類

public class Users 
{ 
public static void main(String[] args) 
{ 
    new Users(); 
} 

private LinkedList<User> users = new LinkedList<User>(); 
private User user; 
private Email email; 

public Users() 
{ menu();} 

private void menu() 
{ char c = readChoice(); 
    while (!isEnd(c)) 
    { execute(c); 
     c = readChoice();}} 

private char readChoice() 
{ System.out.print("Choice (a/d/g/u/x): "); 
    return In.nextChar();} 

private void execute(char c) 
{ switch(c) 
    { case 'a': add(); break; 
     case 'd': delete(); break; 
     case 'g': break; 
     case 'u': use(); break; 
     default : System.out.println(" Invalid choice");}} 

private void use() 
{ User user = new User(this); 
    if (exists(user.getName())) 
     user.use(); 
    else 
     System.out.println(" No such user"); } 

public void send() 
{ User user = user(readRecipient()); 
    String header = readHeader(); 
    String message = readMessage(); 
    if (user != null) 
    { user.add(new Email(user, header, message));} 
     //user.look();this method is just for tes if it is included 
        // in the method above it lists the messages. 
    else 
     System.out.println("No such adress");} 
} 

我的User類

public class User 
{ 
private String name; 
private Users users; 
private LinkedList<Email> emails = new LinkedList<Email>(); 

public User(Users users) 
{ this.users = users; 
    this.name = readName();} 

public void use() 
{ char c = readChoice(); 
    while (!isEnd(c)) 
    { execute(c); 
     c = readChoice();}} 

private char readChoice() 
{ System.out.print(" Choice (l/r/s/d/x): "); 
    return In.nextChar();} 

private void execute(char c) 
{ switch(c) 
    { case 'l': look(); break; 
     case 'r': read(); break; 
     case 's': send(); break; 
     default : System.out.println(" Invalid choice");}} 

public void look() 
{ String s = " "; 
    s += name + " has " + emailSize() + " messages"; 
    System.out.println(s);} 

public void add(Email email) 
{ emails.add(email);} 

private void send() 
{ users.send();} 

} 

最後一堂課電子郵件:

package assignment; 

public class Email { 

private String header; 
private String message; 
private User user; 

public Email(User user, String header, String message) 
{ this.user = user; 
    this.header = header; 
    this.message = message;} 

}

+0

這段長的代碼阻止人們甚至看這篇文章。只發布相關代碼a.k.a. [SSCCE](http://sscce.org) – Mordechai 2013-04-08 04:06:40

+0

這條線代表什麼意思,「但是如果它在主類中被調用,它會顯示消息」。也就像@MouseEvent建議的那樣只發布相關的代碼。 – Jayamohan 2013-04-08 04:08:47

+0

@Jayamohan - 我會冒險猜測:當用戶從菜單中選擇「** l **」時,OP直接從'execute'方法比較調用'look',並在用戶選擇時從'send'方法內部調用look 「計劃** S **」。 – 2013-04-08 04:28:21

回答

0

send法屬性的電子郵件給收件人並採取相應的行動:

public void send() 
{ User user = user(readRecipient()); 
    String header = readHeader(); 
    String message = readMessage(); 
    if (user != null) 
    { user.add(new Email(user, header, message)); 
     user.look();} 
    else 
     System.out.println("No such adress");} 
} 

你叫user.look()和用戶是User user = user(readRecipient());

所以,如果你想比較「蘋果,蘋果」你需要選擇當您使用「l」選項時,收件人也是如此。

+0

相關。user.look()只是爲了測試數據是否存儲在郵件列表中。根據規格,它不應該在那裏。請你詳細說明一下,我有點困惑。謝謝 – dhssa 2013-04-08 05:31:56

+0

@Dilshat Abduwalli - 讓我們說,'readReciepient()'返回「John」。然後,您將電子郵件添加到John的列表中。當您返回到用戶菜單時,您需要選擇「John」並檢查**他的**消息。 – 2013-04-08 13:23:54

相關問題