-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;
}
與其計算最大值然後搜索具有匹配級別的人員,不如考慮只循環一次「聯繫人」列表。您可以跟蹤您目前爲止看到的最高活動級別以及擁有該級別的人員,並且只有在列表中的下一個聯繫人「擊敗」當前最佳分數時才更新它們。 – CAW
順便說一句,還有一個簡單的改進,您可以在不改變算法的情況下對當前的解決方案做出改進。目前,您在findMostSocial()方法內多次計算maxLevel()。你只需要做一次,將該值存儲在一個變量中,然後比較每個人的分數。 – CAW