结合两种方法。不能取消引用int

时间:2018-10-21 00:32:07

标签: java get

如果女性有伴侣,请删除该伴侣的伴侣。 我需要找回她的伴侣,然后使该伴侣成为单身。 如何将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;
    }
}

3 个答案:

答案 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();
                }