在java中创建2个舞者列表中的合作伙伴

时间:2010-08-02 12:28:58

标签: java

我正在尝试编写返回createParther()实例的公共实例方法Couple。该方法通过遵循以下规则来完成其工作:夫妇中的一个舞者必须来自aList而另一个bList,一对夫妇中的一个舞者必须是男性而另一个是女性。这对夫妻中的舞者都不应该合作。如果无法从未组合的舞者中创建一对夫妇,则应返回null。如果成功创建了Couple的实例,那么参与这对夫妇的两个舞者应该将他们的合作实例变量设置为true。我试图将所有aListbList列在一起,但后来我不知道如上所述检查要求。任何人都能说明如何实现这一目标吗?这不是作业。

public class FoxDancing
{
 private List<Couple> coupleList;
 private List<Dancer> aList;
 private List<Dancer> bList;

public FoxDancing()
{
   couplesList = new ArrayList<Parthers>();
   aList = new ArrayList<Dancer>();
   bList = new ArrayList<Dancer>();
}

public void fieldLists()
{
   this.addX("Simon","AList",'m');
   this.addX("Jason","AList",'m');
   this.addX("Ian","AList",'m');
   this.addX("Susan","BList",'f');
   this.addX("Helena","BList",'f');
   this.addX("Gina","BList",'f');
}
} 

3 个答案:

答案 0 :(得分:3)

看起来你想要一个像这样的辅助方法:

Dancer findUnpartnered(List<Dancer> list) {
   for (Dancer d : list) {
      if (d.isUnpartnered()) {
          return d;
      }
   }
   return null;
}

这使用"foreach loop"Dancer中的所有List<Dancer>进行简明易读的迭代。

然后你可以这样写:

Couple createCouple() {
   Dancer a = findUnpartnered(aList);
   Dancer b = findUnpartnered(bList);
   if (a == null || b == null) {
      return null;
   } else {
      a.setPartnered(true);
      b.setPartnered(true);
      return new Couple(a, b);
   }
}

虽然这应该有用,但请注意findUnpartneredO(N) 线性搜索。如果列表具有相当长的长度,请考虑使用其他数据结构,例如:一个Set<Dancer>,用于将列表划分为未合作和合作的子集。


关于泛型不变性

你写了以下内容:

// snippet from original code
private List<Couple> coupleList;
//...
couplesList = new ArrayList<Parthers>(); // DOES NOT COMPILE!

这不会编译。 List<Partner>(假设这是您打算写的)是 NOT a List<Couple>。也许你想要一个new ArrayList<Couple>,或者Partner是[{1}}的子类型,那么也许你想要一个Couple

相关问题

另见


List<? extends Couple> coupleList

你写了以下内容:

enum

我对Foxtrot跳舞知之甚少,但如果有概念 A-list B-list ,那么你可以考虑使用{{1}而不是// snippet from original code this.addX("Simon","AList",'m'); this.addX("Susan","BList",'f'); // potentially "bad" use of String and char constants! 标记enumString。同样,如果只有男性女性舞者,则"AList"会比"BList"enum好得多。< / p>

'm'

另见

相关问题

答案 1 :(得分:3)

也许我并不完全理解您的要求,但由于看起来aList由男性和bList女性组成,这可能就像将两个名单混合并将夫妻配对一样简单一个循环,直到一个列表为空。

答案 2 :(得分:0)

首先写一下舞蹈课,完成你需要的所有方法。然后考虑是否要创建一对情侣的实例,或者如果您只想让每个舞者都参考他们的伴侣。一旦你到达这一点,剩下的应该开始落实到位。 :d