0

I show a example for explain my problem I login with User "Clarke" and I send a friend request at User "John" After I do logout from Clarke's account and I login with "John". I choose for case -> 4 and show me the Friend Request from Clarke but when I write Clarke name for accept the request program doest go inside to addFriends method.

User Class:

 import java.util.*;
 import java.sql.*;

    public class User
 { 

private int like=0;
private String username;
private String email;
Scanner scanner = new Scanner(System.in);


 public User (String username , String email){
    this.username=username;
    this.email=email;
}
ArrayList <User> friends= new ArrayList<>();
ArrayList <User> friendrequest = new ArrayList<>();
public void addFR(User u){
    friendrequest.add(u);
    System.out.println(" a request has been sent to this user");
}
public void readFR(){
    for(int p=0  ;p< friendrequest.size() ;p++){
        System.out.println(friendrequest.get(p).getUsername());
    }

 }
 public void sendFR(){
     System.out.println("Search for a friend");
 }
 public void removeFriends(User u){
    friends.remove(u);
 }
 public void addFriends(User u){

    if(!friends.equals(u) && !username.equals(u.getUsername()) && 
  friendrequest.equals(u) ){  

    System.out.println("You have a friend request!");
    System.out.print("If you want to accept it write 1:")  ;
    int a= scanner.nextInt();
        if(a==1){
           friends.add(u);
           System.out.println("You have a new friend!");
        }


   }


  }


  public Timestamp Time(){
    Timestamp timestamp = new Timestamp(System.currentTimeMillis());
    return timestamp;
 }
 public void like(Message m){
    like++;
    System.out.println("Likes of this message are: " + like); 

 }
 public void yourFriends(){
    System.out.println("Your Friends:");
     for(int y= 0;  y< friends.size(); y++){
         System.out.println(friends.get(y).getUsername());
        }
}
 public void returnFriends(){


    for(Object value: friends){
        System.out.println("Your Friends Are: "+ value);

    }
}

  public  String getUsername() {
    return username;
 }
 public String getEmail(){
    return email;
 }
}

Main Class:

   import java.util.*;

   public class Main 
     {   
    public static void main(String args[]){
         Scanner scan= new Scanner(System.in);   
         User cg = new User("Clarke" ,"griffinc@gmail.com");
         User bb = new User("Bellamy" ,"blakeb@gmail.com");
         User ob = new User("Octavia" ,"blakeo@gmail.com");
         User rr = new User("Raven" ,"reyesr@gmail.com");
         User jm = new User("John" ,"murphyj@gmail.com");
         User mg = new User("Monty" ,"greenm@gmail.com");

         Message message1= new Message("Clarke","Clake :...");
         Message message2= new Message("Bellame","Bellame:");
         Message message3= new Message("Octavia","Octavia:..");
         Message message4= new Message("Raven","Raven:..");
         Message message5= new Message("John","John:...");
         Message message6= new Message("Monty","Monty:Be the good guys.May 
     we met again");

         ArrayList <User> users= new ArrayList<>();
         ArrayList<Message> message= new ArrayList<>();


         users.add(cg);
         users.add(bb);
         users.add(ob);
         users.add(rr);
         users.add(jm);
         users.add(mg);

         message.add(message1);
         message.add(message2);
         message.add(message3);             
         message.add(message4);
         message.add(message5);             
         message.add(message6);  



         //login
         boolean login=false;
         boolean newlogin=false;
         User loginUser=new User(" "," ");
         while(newlogin==false){
             while (login==false){
             for(int j=0; j<users.size(); j++)
             {
                System.out.println(j+1 +":"+ users.get(j).getUsername());
                }
                System.out.println("Give your username:");  
               String username=scan.next();
                for(int i = 0; i < users.size(); i++)
            {
              if(username.equals(users.get(i).getUsername() ) ) {
                 loginUser=users.get(i);
                 login=true;

              }

            }


   }

    //Menu
   boolean luna=false; 
   System.out.println("You are online!");
   while(luna==false){
   System.out.println("||Menu|| Choose:");
   System.out.println("1 ->  See Your Wall");
   System.out.println("2-> See Your Friend Wall");
   System.out.println("3-> Send friend request");
   System.out.println("4->Accept/Reject friend request");
   System.out.println("5->See My Friends");
   System.out.println("6->");
   System.out.println("7->New Login");
   System.out.println("8->Exit");
    int choice =scan.nextInt();

    switch(choice){
       case 1:
       for(int z = 0; z < message.size(); z++){
         if(loginUser.getUsername().equals(message.get(z).getUsername() )) 
  {
         System.out.println("//Your Wall//" + message.get(z).getPost() + 
 message.get(z).Time());
         }
      } 
       luna=false;
       break;
       case 2:
       System.out.println("Who's wall do you want to see");
       String myf=scan.next();
        for(int w = 0;  w< users.size(); w++){
         if(myf.equals(users.get(w).getUsername()) ){
           System.out.print( "//" + myf + "'s Wall//" ); 
              for(int q = 0; q < message.size(); q++){
                  if (myf.equals(message.get(q).getUsername())){
                   System.out.println(message.get(q).getPost());
                }
            }
        }
      }
       luna=false;
       break;

       case 3:
       loginUser.sendFR();
       String fr= scan.next();
       for(int p = 0;  p< users.size(); p++){
           if(fr.equals(users.get(p).getUsername()) && 
   !fr.equals(loginUser.getUsername())){
               users.get(p).addFR(loginUser);
            }

        }
         luna =false;
         break;

        case 4:
        loginUser.readFR();
        System.out.println("Do you want someone for be your friend?(write 
      his username)");
        String yn=scan.next();
        for(int t = 0;  t< users.size(); t++)
        {
            if(yn.equals(users.get(t).getUsername()))
            loginUser.addFriends(users.get(t));
       }  
        luna =false;
        break;
        case 5:
        loginUser.yourFriends();
        luna=false;
        break;
        case 7:
        luna=true;
        login=false;
        break;
        case 8:
        luna=true;
        newlogin=true;
        break;
       }
   }
 }
}
}
Nexevis
  • 4,647
  • 3
  • 13
  • 22
arxxx
  • 15
  • 3

2 Answers2

0

Your problem is this line here in your addFriends() method in the User class:

if(!friends.equals(u) && !username.equals(u.getUsername()) && friendrequest.equals(u) )

It should use .contains() rather than .equals when comparing to friends and friendrequests, since you are currently comparing a List to a User.

This is how it should look:

if(!friends.contains(u) && !username.equals(u.getUsername()) && friendrequest.contains(u) 

I tested your code with this fix and it was able to add a friend successfully.

Nexevis
  • 4,647
  • 3
  • 13
  • 22
0

Nexevis's answer will add a User object to the list of friends but it only gets you partway there. Can the same friend be added twice? Would it make sense as per your use case? If not, consider changing the type of collection to a set (such as HashSet) and overriding the equals and hashCode methods in the User class.

In your user class you can add

@Override
public boolean equals(Object o) {

    if (o == this) return true;
    if (!(o instanceof User)) {
        return false;
    }
    User user = (User) o;
    // return Objects.equals(this.field, user.field) in and for every relevant field of the user class for comparison
    return Objects.equals(this.username, user.username) && Objects.equals(this.email, user.email);
}

@Override
public int hashCode() {
    return Objects.hash(name, age, passport);
}

See here for more information on hash code and equals.

geco17
  • 5,152
  • 3
  • 21
  • 38