我的代碼是一個簡單的郵件系統。該系統由四類:爲什麼我在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;}
}
這段長的代碼阻止人們甚至看這篇文章。只發布相關代碼a.k.a. [SSCCE](http://sscce.org) – Mordechai 2013-04-08 04:06:40
這條線代表什麼意思,「但是如果它在主類中被調用,它會顯示消息」。也就像@MouseEvent建議的那樣只發布相關的代碼。 – Jayamohan 2013-04-08 04:08:47
@Jayamohan - 我會冒險猜測:當用戶從菜單中選擇「** l **」時,OP直接從'execute'方法比較調用'look',並在用戶選擇時從'send'方法內部調用look 「計劃** S **」。 – 2013-04-08 04:28:21