如果一个女人有一个伴侣,抹去那个伴侣的伴侣。我要找回她的搭档然后让那个搭档单身。如何将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;
}
}发布于 2018-10-21 00:44:43
现在,您可以将partner作为int。您不能在int上调用方法,因为它是一个基本类型。然而,这在您的上下文中没有多大意义,因为您正在删除w的合作伙伴,而不是partner的合作伙伴。
if (w.hasPartner() == true) {
w.erasePartner();
}而且,您的代码没有多大意义。为什么合伙人是个int?为什么它不是一个Person对象。您可以将代码更改为:
private Person partner;和
public Person getPartner() {
return partner;
}所以partner指向另一个Person对象,而不是int
发布于 2018-10-21 01:16:13
如果要删除合作伙伴的合作伙伴,则需要能够获得partner字段对应的partner。
给定您的代码,每个Person都应该有一个对应的id,即int,这是partner字段存储的值。您将需要某种方式来存储这些映射,比如驻留在Person类之外的Person,每当您创建Person时,您必须将它连同它的id一起放在映射中(只要它是唯一的,就可以生成它)。
使用此映射,您可以访问对应于合作伙伴int的int并擦除其合作伙伴。
if (w.hasParter()) {
Person partner = personMap.get(w.getPartner());
partner.erasePartner()
}假设合作伙伴存在于地图中(您可能需要检查它)。
发布于 2018-10-21 01:30:06
好吧我想明白了。我做了另一种方式。检查每个人和测试人员,看看person p是否是firstChoice的伙伴,然后删除p的合作伙伴。看上去似乎很长,但效果很好:)
for (Person p : list1) {
if (p.getPartner() == firstChoice) {
p.erasePartner();
}https://stackoverflow.com/questions/52911190
复制相似问题