2013-04-08 51 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

相关问题