排序字符串数组和int数组

时间:2013-11-17 00:22:13

标签: java arrays sorting

我正在制作一个关于java的约会网站。我想为用户找到三个最兼容的匹配项。所以我有一个三个整数的数组,如果用户更兼容,最低兼容分数将被替换。我这样做是使用选择排序。我还需要引用是正确的,所以我可以返回正确的名称。我无法想象如何对字符串数组进行排序。感谢您的帮助和代码:

  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?!?!
        }

2 个答案:

答案 0 :(得分: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;
}

它可能不是很优化,但您可以根据需要修复它。基本上只检查当前用户的值是否高于集合中现有用户的最低值。如果是,请与其他2个用户一起创建一个新集合,并将其分配给您的第一个集合。

对于大型数据集,这是不切实际的,但我们在这里讨论的是3个用户,所以这不应该是个问题。

答案 1 :(得分:0)

如果这些实际上应该是名称/分数对(即scoreA是nameA的分数,scoreB是nameB的分数,依此类推),那么简单解决方案是这样的:

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

......并适当地使用它。例如,您现在可以按名称或分数对这些Score个对象的列表或数组进行排序。

不幸的是,不可能弄清楚你向我们展示的代码应该做什么,以及它应该如何与你的其余代码进行交互。因此,如何修改代码以使用它并不完全清楚。也许您最好按照Jeroen的建议重新开始并完全重新设计数据结构。