2017-04-06 94 views
-2

我對Java很新,並且被困在以下任務中。我被要求在AddressBook類中創建一個方法,該方法返回總ActivityLevel最高的Person對象。如何簡化我的Java代碼?

我已經創建了getSocialMediaActivityLevel(),maxValue()和findMostSocial()方法。

findMostSocial方法確實會返回我之後的值,但是賦值的描述包含語句「需要您設計一個簡單算法並將其集成到現有類中」。看起來我已經使用了大量不必要的代碼,但我很不確定如何簡化我所做的工作。任何幫助是極大的讚賞。

public class SocialMediaAccount { 
    private String userID; 
    private String websiteName; 
    private String websiteURL; 
    private int activityLevel; 

    public SocialMediaAccount(String userID, String websiteName, String websiteURL, int activityLevel) { 
     this.userID = userID; 
     this.websiteName = websiteName; 
     this.websiteURL = websiteURL; 
     this.activityLevel = activityLevel; 
} 
    public void addSocialMediaAccount(String userID, String websiteName, String websiteURL, int activityLevel) { 
     SocialMediaAccount account1; 
     account1 = new SocialMediaAccount(userID, websiteName, websiteURL, activityLevel); 
     socialMediaAccounts.add(account1); 

}

import java.util.ArrayList; 
    public class Person { 
     private String firstName; 
     private String surname; 
     private String mobile; 
     private String email; 
     private ArrayList<SocialMediaAccount> socialMediaAccounts; 

//returns the combined ActivityLevel for all the Person's SocialMediaAccounts. 
    public int getSocialMediaActivityLevel(){ 
     int total = 0; 
      for(SocialMediaAccount e : socialMediaAccounts){ 
       total += e.getActivityLevel(); 
      } 
     return total; 

}

import java.util.ArrayList; 
import java.util.Collections; 
public class AddressBook { 
    private ArrayList<Person> contacts; 

    public AddressBook(){ 
     contacts = new ArrayList<>();  
    } 

//returns the highest combined ActivityLevel in the ArrayList contacts 
     public int maxValue(){ 
      ArrayList<Integer> maxActivityLevel = new ArrayList<>(); 
       for(Person e : contacts){ 
        maxActivityLevel.add(e.getSocialMediaActivityLevel()); 
       } 
      int maxValue = Collections.max(maxActivityLevel); 
     return maxValue; 
     } 

//returns the Person object in the contacts ArrayList with the highest combined ActivityLevel 
     public Person findMostSocial(){ 
      for(Person p: contacts){ 
       if(maxValue() == p.getSocialMediaActivityLevel()){ 
        return p; 
       } 
      } 
     return null; 
    } 
+0

與其計算最大值然後搜索具有匹配級別的人員,不如考慮只循環一次「聯繫人」列表。您可以跟蹤您目前爲止看到的最高活動級別以及擁有該級別的人員,並且只有在列表中的下一個聯繫人「擊敗」當前最佳分數時才更新它們。 – CAW

+0

順便說一句,還有一個簡單的改進,您可以在不改變算法的情況下對當前的解決方案做出改進。目前,您在findMostSocial()方法內多次計算maxLevel()。你只需要做一次,將該值存儲在一個變量中,然後比較每個人的分數。 – CAW

回答

0

我想你所需要的就是Quick Sort這裏的算法來確定人員名單社交媒體活動的最大值。所以,我建議用實現QuickSort的方法替換maxValue()和findMostSocial()方法。這裏有一個這樣的implementation供參考。乾杯