-1

下面是我的JAVA方法

public static List<Match<String, String>> Decider
    (List<Preference<String, String>> hospitalPrefs,List<Preference<String, String>> studentPrefs)
{
    Match<String, String> matching = new Match<String, String>(null, null);
    List<Match<String, String>> matcher = new ArrayList<Match<String, String>>();

    /** Matching the preference of the hospital with the student */

    for(int hospitalLoop = 0;hospitalLoop < hospitalPrefs.size(); hospitalLoop++)
    {
        String hospitalPreferrer = hospitalPrefs.get(hospitalLoop).getPreferrer();
        String hospitalPreferred = hospitalPrefs.get(hospitalLoop).getPreferred();
        int hospitalValue = hospitalPrefs.get(hospitalLoop).getValue();

        for(int studentLoop = 0;studentLoop < studentPrefs.size();studentLoop++)
        {
            String studentPreferrer = studentPrefs.get(studentLoop).getPreferrer();
            String studentPreferred = studentPrefs.get(studentLoop).getPreferred();
            int studentValue = studentPrefs.get(studentLoop).getValue();

            if(hospitalPreferred.equals(studentPreferrer)
                    && hospitalPreferrer.equals(studentPreferred)
                    && hospitalValue == studentValue)
            {
                System.out.println(hospitalPreferred + "," + studentPreferred);
                matching.setItem1(hospitalPreferred);
                matching.setItem2(studentPreferred);
                matcher.add(matching);
                break;
            }
        }
    }
    return matcher;
}

matcher 变量覆盖列表。我对此感到困惑。

就像我添加
a,b,c 一样。

在 matcher 变量中添加 c,c,c

我很困惑我哪里出错了。

谢谢 !!!

4

3 回答 3

0

您初始化匹配一次,然后更改其值。你需要

matching = new Match<String,String>();

在你的循环中的某个地方。

于 2013-04-09T20:57:40.437 回答
0

您正在创建matchingbefore 循环的实例,然后将相同的实例添加到您的集合中。您可能想在循环内创建匹配:

    ................
    System.out.println(hospitalPreferred + "," + studentPreferred);
    Match<String, String> matching = new Match<String, String>(null, null);
    matching.setItem1(hospitalPreferred);
    matching.setItem2(studentPreferred);
    matcher.add(matching);
    break;        
    ................
于 2013-04-09T20:57:48.220 回答
0

您只是matching一遍又一遍地添加相同的内容。

如果我是你,我会搬家

Match<String, String> matching = new Match<String, String>(null, null);

到之前

matching.setItem1(hospitalPreferred);
matching.setItem2(studentPreferred);
matcher.add(matching);
于 2013-04-09T20:57:51.637 回答