如果女性有伴侣,请删除该伴侣的伴侣。
我需要找回她的伴侣,然后使该伴侣成为单身。
如何将getPartner()
与erasePartner()
if (w.hasPartner() == true) {
w.getPartner().erasePartner();
}
import java.util.*;
public class Person {
public static final int NOBODY = -1;
private String name;
private List<Integer> preferences;
private List<Integer> oldPreferences;
private int partner;
public Person(String name) {
this.name = name;
preferences = new ArrayList<Integer>();
oldPreferences = new ArrayList<Integer>();
erasePartner();
}
public void erasePartner() {
partner = NOBODY;
}
public boolean hasPartner() {
return partner != NOBODY;
}
public int getPartner() {
return partner;
}
public void setPartner(int partner) {
this.partner = partner;
}
public String getName() {
return name;
}
public boolean hasChoices() {
return !preferences.isEmpty();
}
public int getFirstChoice() {
return preferences.get(0);
}
public void addChoice(int person) {
preferences.add(person);
oldPreferences.add(person);
}
public List<Integer> getChoices() {
return preferences;
}
public int getPartnerRank() {
return oldPreferences.indexOf(partner) + 1;
}
}
答案 0 :(得分:1)
现在您将partner
作为int
。您不能在int上调用方法,因为它是原始类型。但是,这在您的上下文中没有多大意义,因为您要擦除w
的伙伴而不是partner
的伙伴。相反,只需致电:
if (w.hasPartner() == true) {
w.erasePartner();
}
您的代码也没有多大意义。为什么伙伴是int?为什么它不是Person
对象。您可以将代码更改为:
private Person partner;
还有
public Person getPartner() {
return partner;
}
这样partner
指向另一个Person
对象而不是int
答案 1 :(得分:0)
如果要删除伙伴的伙伴,则需要能够获得Persona
字段所对应的partner
。
鉴于您拥有的代码,每个Person
应该有一个对应的ID,即int
,即partner
字段存储的值。您将需要某种方式来存储这些映射,例如Map<Integer, Persona>
类之外的Person
,并且每当创建Person
时,都必须将其连同其映射一起放入映射中。 id(您可以根据自己的喜好生成它,只要它是唯一的)。
使用此地图,您可以访问与伙伴Person
相对应的int
并删除其伙伴
if (w.hasParter()) {
Person partner = personMap.get(w.getPartner());
partner.erasePartner()
}
假设伙伴在地图中存在(您可能要检查)。
答案 2 :(得分:0)
好吧,我有点想通了。我做了另一种方式。仔细检查每个人并进行测试,看看人p是否与firstChoice成为伙伴,然后删除p的伙伴。金达似乎很长一段时间,但它可以工作:)
for (Person p : list1) {
if (p.getPartner() == firstChoice) {
p.erasePartner();
}