您好我的java编码有问题。我无法弄清楚如何指向一个物体。
代码看起来像这样。我有两节课。用户和用户。将用户列表作为链接列表进行管理的用户类是添加,删除等的类。我必须编写一个方法,然后将消息从一个用户发送给另一个用户。
该方法位于User类中,另一个send方法位于Users类中,将由User - send()调用以访问该列表。由于用户的主要构造函数设置为驱动整个程序。我必须编写另一个构造函数。但我被困在这里。
import java.util.*;
public class User
{
private String name;
private Users users;
public User()
{
this.name = readName();
}
public User(Users users)
{
this.users = users;
}
private String readName()
{
System.out.print(" Name: ");
return In.nextLine();
}
public boolean matches(String name)
{
return this.name.equals(name);
}
public String getName()
{
return this.name;
}
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 boolean isEnd(char c)
{
return c == 'x';
}
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");
}
}
private void look()
{
}
private void read()
{
}
private void send()
{
users.send();
}
}
第二课
import java.util.*;
public class Users
{
public static void main(String[] args)
{
new Users();
}
private LinkedList<User> users = new LinkedList<User>();
private LinkedList<Email> emails = new LinkedList<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 boolean isEnd(char c)
{
return c == 'x';
}
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 add()
{
User user = new User();
if (!exists(user.getName()))
{
users.add(user);
System.out.println(" User " + getIndex(user) + ": " +
user.getName());
}
else
System.out.println("already exists");
}
private int getIndex(User user)
{
int index = users.indexOf(user) + 1;
return index;
}
private void delete()
{
User user = user(readName());
if (user != null)
users.remove(user);
else
System.out.println(" No such name");
}
public void send()
{
}
private void use()
{
User user = new User();
if (exists(user.getName()))
user.use();
else
System.out.println(" No such user");
}
private boolean exists(String name)
{
return user(name) != null;
}
private User user(String name)
{
for (User user: users)
if (user.matches(name))
return user;
return null;
}
private String readName()
{
System.out.print(" Names: ");
return In.nextLine();
}
}
答案 0 :(得分:0)
在第一个文件(类)中,您需要初始化变量。 private Users users = new Users();
这样,您的send
方法将不会访问空对象。
但是,查看您的代码时,您遇到了一个更大的问题:用户访问用户,反之亦然。
您的问题不是空指针,您的问题是您的程序设计不正确。如果ClassA使用ClassB,ClassB应该不尽可能使用ClassA。在您的情况下,您需要重新考虑您的逻辑。
要使用建议的解决方案,当您在第二个文件中实例User时,您应该将当前对象作为参考传递。喜欢这个
private void add()
{
User user = new User(this);
...
}
和这个
private void use()
{
User user = new User(this);
...
}