2013-11-17 3 views
0

Я работаю над созданием сайта знакомств на java. Я хочу найти три наиболее совместимых соответствия для пользователя. Таким образом, у меня есть массив из трех целых чисел, и если пользователь более совместим, то наименее совместимая оценка будет заменена. Я делаю это, используя сортировку. Мне также нужны ссылки, чтобы быть правильными, чтобы я мог возвращать собственные имена. Я не могу понять, как сортировать строковый массив. Спасибо за помощь и приветствует код:сортировка массива строк и массива int

public void findMatches(String matchName) 
    { 
    String nameA = null; 
    String nameB = null; 
    String nameC = null; 
    int matchA = -1; 
    int matchB = -2; 
    int matchC = -3; 
    Member ref = userList.get(matchName); 
    if(ref.getDesiredAge()>=45 && ref.getDesiredSex().equalsIgnoreCase("Male")) 
    { 
    for(String na : userListMaleOld.keySet()) 
    { 
     Member refA = userListMaleOld.get(na); 
     int numberOfMatches=findQuestionMatches(ref, refA); 
     int [] counts = {matchA, matchB, matchC}; 
     String [] names = {nameA, nameB, nameC}; 
     counts = doSelectionSort(counts); 
     if(numberOfMatches>counts[0]); 
     { 
      counts[0] = numberOfMatches; 
      ?!?!?!?!?!??!??!??!WHAT HERE?!?! 
     } 
+0

Почему бы вам не сделать класс? – nhgrif

+0

класс какой? – user3000621

+0

Чтобы удерживать пару 'String' и' int'? Таким образом, вы можете просто сортировать объекты класса, а 'String' и' int' оставаться в паре независимо от того, что они просто свойства отсортированных объектов ... – nhgrif

ответ

1

Вместо этого используйте Map.

Бетон это означает, что вы можете сделать что-то вроде этого:

Map<User, Integer> bestMatches = new HashMap<>(); 

void validateUser(User user, int value) { 
    if(bestMatches.size() < 3) { 
    bestMatches.put(User, 3); 
    return; 
    } 

    Map<User, Integer> newMap = new HashMap<User, Integer>(); 
    User minValue = Collections.min(bestMatches.values()); 
    if(value > minValue) { 
    for(Map.Entry<User, Integer> entry: bestMatches.entrySet()) { 
      if(entry.getValue() != minValue) { 
       newMap.put(entry.getKey(), entry.getValue()); 
      } 
    } 
    newMap.put(user, value); 
    } 

    bestMatches = newMap; 
} 

Это, вероятно, не очень оптимизирован, но вы можете исправить это, как вы хотите. В основном просто проверьте, превышает ли значение текущего пользователя самое низкое значение среди существующих пользователей в коллекции. Если это так, создайте новую коллекцию с двумя другими пользователями и назначьте ее первой коллекции.

Для больших наборов данных это было бы непрактично, но мы говорим о 3 пользователях здесь, поэтому это не должно быть проблемой.

0

Если они на самом деле должны быть пар имя/оценка (т.е. scoreA является оценка для НАМЕА, scoreB является оценка для NAMEB и так далее), то простое решение что-то вроде этого:

public class Score { 
    private String name; 
    private int score; 
    // Declare a constructor and getters 
    } 

... и использовать это надлежащим образом. Например, теперь вы можете отсортировать список или массив из этих Score объектов по имени или по счету.

К сожалению, не представляется возможным определить, что должен делать код, который вы нам показали, и как он должен взаимодействовать с остальной частью вашего кода. Поэтому не совсем понятно, как вы должны изменить свой код, чтобы использовать это. И это может быть, что вы лучше всего , начиная с, следуя советам Jeroen и полностью переделывая свои структуры данных.

Смежные вопросы