我正在制作一个关于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?!?!
}
答案 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的建议重新开始并完全重新设计数据结构。