Привет, мои коллеги-прагматики-программисты, я создал программу социальной сети на java, используя IDE BlueJ. Я скомпилировал все классы, и все они возвращаются к ясности, однако всякий раз, когда я пытаюсь запустить программу в целом на терминале, который встроенный в BlueJ, он переходит в меню, и я набираю 2, чтобы добавить пользователей, затем он выводит println «Имя пользователя:» Я иду и добавляю ему имя, а затем он выводит ошибку "java.lang.NullPointerException: null" и выделяет оператор if в AddUser () также я заметил, что он также выделяет это в операторе if DeleteUser (), и я просто не понимаю, почему он делает, что все, кажется, работает нормально, но NPE продолжает выделять операторы if.
Вот два метода:
public void AddUser() {
System.out.println("Enter A Username ");
String username = scanner.nextLine();
if (user.containsKey(username)) {// <--NULL POINTER EXCEPTION HERE
System.out.println("User Exists! ");
} else {
System.out.println("Enter A Password ");
String password = scanner.nextLine();
UELbookUser uelbookuser = new UELbookUser(username, password);
user.put(username, uelbookuser);
}
}
public void DeleteUser() {
System.out.println("Enter A Username ");
String username = scanner.nextLine();
if (user.containsKey(username)) { // <--NULL POINTER EXCEPTION HERE
UELbookUser uelbookuser = user.get(username);
System.out.println("Enter A Password ");
String password = scanner.nextLine();
if (uelbookuser.password.equals(password)) {
user.remove(username);
System.out.println("User Has Been Removed");
}
} else {
System.out.println("That particular user does not exist!");
}
}
Полная программа:
Класс социальной сети:
import java.io.*;
import java.util.*;
public class SocialNetwork
{
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
UELbook uelbook = new UELbook();
while (true) {
System.out.println("Select: 1) List All Users, 2) Add A User, 3) Delete A User, 4) Befriend A User, 5) Unfriend A User, 6) List All Users, 7) Exit");
String choice = scanner.nextLine();
if (choice.equals("1")) {
uelbook.PrintUser();
} else if (choice.equals("2")) {
uelbook.AddUser();
} else if (choice.equals("3")) {
uelbook.DeleteUser();
} else if (choice.equals("4")) {
uelbook.Friend();
} else if (choice.equals("5")) {
uelbook.DeleteUser();
} else if (choice.equals("6")) {
uelbook.ListOfFriends();
} else {
System.out.println("Error!!! Please choose again from the options!");
}
}
}
}
Класс Uelbook:
import java.util.*;
import java.io.*;
public class UELbook implements Serializable {
private static final long serialVersionUID = 1L;
Scanner scanner = new Scanner(System.in);
HashMap<String, UELbookUser> user;
public UELbook() {
HashMap<String, UELbookUser> user = new HashMap<String, UELbookUser>();
}
public void PrintUser() {
for (String key : user.keySet()) {
System.out.println(user.get(key));
}
}
public void AddUser() {
System.out.println("Enter A Username ");
String username = scanner.nextLine();
if (user.containsKey(username)) {// <--NULL POINTER EXCEPTION HERE
System.out.println("User Exists! ");
} else {
System.out.println("Enter A Password ");
String password = scanner.nextLine();
UELbookUser uelbookuser = new UELbookUser(username, password);
user.put(username, uelbookuser);
}
}
public void DeleteUser() {
System.out.println("Enter A Username ");
String username = scanner.nextLine();
if (user.containsKey(username)) { // <--NULL POINTER EXCEPTION HERE
UELbookUser uelbookuser = user.get(username);
System.out.println("Enter A Password ");
String password = scanner.nextLine();
if (uelbookuser.password.equals(password)) {
user.remove(username);
System.out.println("User Has Been Removed");
}
} else {
System.out.println("That particular user does not exist!");
}
}
public void Friend() {
System.out.println("Enter A Username");
String username = scanner.nextLine();
if (username != null && !user.containsKey(username)) {
System.out.println("That particular user does not exist!");
} else {
UELbookUser uelbookuser = user.get(username);
System.out.println("Enter A Password ");
String password = scanner.nextLine();
if (uelbookuser.password.equals(password)) {
System.out.println("Enter friend/acquitance name: ");
String friendName = scanner.nextLine();
if (friendName.equals(username)) {
System.out.println("Error!!!");
} else {
UELbookUser friend = user.get(friendName);
uelbookuser.friend(friend);
user.put(username, uelbookuser);
}
}
}
}
public void DeleteFriend(UELbookUser FormerFriend) {
System.out.println("Enter A Username");
String username = scanner.nextLine();
if (username != null && !user.containsKey(username)) {
System.out.println("That particular user does not exist!");
} else {
UELbookUser uelbookuser = user.get(username);
System.out.println("Enter A Password ");
String password = scanner.nextLine();
if (uelbookuser.password.equals(password)) {
System.out.println("Enter friend/acquitance name: ");
String friendName = scanner.nextLine();
if (friendName.equals(username)) {
System.out.println("Error!!!");
} else {
UELbookUser friend = user.get(friendName);
uelbookuser.DeleteFriend(friend);
}
}
}
}
public void ListOfFriends() {
System.out.println("Enter A Username");
String username = scanner.nextLine();
if (username != null && !user.containsKey(username)) {
System.out.println("That particular user does not exist!");
} else {
UELbookUser uelbookuser = user.get(username);
System.out.println("Enter A Password ");
String password = scanner.nextLine();
if (uelbookuser.password.equals(password)) {
System.out.println("List of Friends: ");
uelbookuser.OutputFriends();
}
}
}
}
Класс UelbookUser:
import java.io.*;
import java.util.*;
import java.io.Serializable;
import java.lang.Object;// cloneable also .clone()
public class UELbookUser extends Friends implements java.io.Serializable, Cloneable, Comparable<UELbookUser> {
private static final long serialVersionUID = 1L;
protected ArrayList<UELbookUser> friends;// was protected try public
public UELbookUser(String username, String password) {
super(username, password);
ArrayList<UELbookUser> friends = new ArrayList<UELbookUser>();
}
public void friend(UELbookUser NewFriend) {
if (friends.contains(NewFriend)) {
System.out.println("This particular friend HAS already been added!");
} else {
friends.add(NewFriend);
}
}
public void DeleteFriend(UELbookUser FormerFriend) {
if (!friends.contains(FormerFriend)) {
System.out.println("This particular friend has NOT been added! ");
} else {
friends.remove(FormerFriend);
}
}
public ArrayList<UELbookUser> OutputFriends() {
ArrayList<UELbookUser> CopyOfFriends = new ArrayList<UELbookUser>();
for (UELbookUser user : this.friends) {
try {
CopyOfFriends.add((UELbookUser) user.clone());//THIS WAS COPY THE BITWISE OF THE OUTPUT
} catch (CloneNotSupportedException CSE) {
CSE.printStackTrace();
}
}
for (int i = 0; i < CopyOfFriends.size(); i++) {
System.out.println(CopyOfFriends.get(i));//THIS WILL ITERATE IT
}
return CopyOfFriends;//OUTPUT RETURNED
}
public int compareTo(UELbookUser a) {
if (this.username.compareTo(a.username) != 0) {//compareToIgnoreCase
return this.username.compareTo(a.username);//compareToIgnoreCase
}
return 0;
}
}
Класс друзей:
import java.io.*;
import java.util.*;
import java.io.Serializable;
public abstract class Friends implements Serializable {
private static final long serialVersionUID = 1L;
public String username;// use to be protected
public String password;// use to be protected
public Friends(String username, String password) {
this.username = username;
this.password = password;
}
public boolean CheckPassword(String password) {
boolean PasswordMatch;
if (password.equalsIgnoreCase(this.password)) {
PasswordMatch = true;
} else {
PasswordMatch = false;
}
return PasswordMatch;
}
@Override
public boolean equals(Object object) {
if (this == object)
return true;
if (object == null)
return false;
if (getClass() != object.getClass())
return false;
Friends ran = (Friends) object;// ran=random
if (username == null) {
if (ran.username != null)
return false;
} else if (!username.equalsIgnoreCase(ran.username))
return false;
return true;
}
//@Override
public String OutputUsername() {
return "Username: " + username + " ";
}
}
Это та часть, где она вызывает ошибки в инструкции if.
Да, потому что поле user никогда не инициализируется.
Затем это вызывает больше ошибок, потому что я закомментировал всю строку, и теперь я получаю сообщение об ошибке для цикла for, в котором я распечатываю имена пользователей // HashMap <String, UELbookUser> user; это вызвало ошибку в public void PrintUser () {for (String key: user.keySet ()) {System.out.println (user.get (key)); }}
Почему вы это прокомментировали?
Когда вы говорите, что тип - это часть хэш-карты, или я полностью избавляюсь от всей строки.
Оставьте поле в покое. Измените тело конструктора на user = new HashMap<>();.
О, ты спасатель, как мне тебя поблагодарить!




Вы объявляете в конструкторе локальную переменную
user. Удалите тип перед назначением.