有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何解决addFriends方法的问题

我举一个例子来解释我的问题 我使用用户“Clarke”登录,并通过用户“John”发送好友请求 在我从Clarke的帐户注销并用“John”登录之后。我选择案例->;4并向我显示来自Clarke的好友请求,但当我为accept编写Clarke name时,程序不会进入addFriends方法

用户类别:

 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;
 }
}

主要类别:

   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;
       }
   }
 }
}
}

共 (2) 个答案

  1. # 1 楼答案

    您的问题是User类中的addFriends()方法中的这一行:

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

    当与friendsfriendrequests进行比较时,它应该使用.contains()而不是.equals,因为您当前正在将ListUser进行比较

    它应该是这样的:

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

    我用这个补丁测试了你的代码,它成功地添加了一个朋友

  2. # 2 楼答案

    Nexevis的回答会在好友列表中添加一个User对象,但它只会让你达到一半。同一个朋友可以加两次吗?根据您的使用案例,它有意义吗?如果不是,请考虑将集合类型更改为集合(如^ {CD2> }),并在^ {< CD1> }类中重写^ {< CD3> }和^ {CD4}}方法。

    在用户类中,可以添加

    @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);
    }
    

    有关散列码和equals的更多信息,请参见here