首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将两种方法结合起来。不能取消int的引用

将两种方法结合起来。不能取消int的引用
EN

Stack Overflow用户
提问于 2018-10-21 00:32:06
回答 3查看 41关注 0票数 0

如果一个女人有一个伴侣,抹去那个伴侣的伴侣。我要找回她的搭档然后让那个搭档单身。如何将getPartner()erasePartner()相结合

代码语言:javascript
运行
复制
if (w.hasPartner() == true) { 
    w.getPartner().erasePartner();
}
代码语言:javascript
运行
复制
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;
    }
}
EN

回答 3

Stack Overflow用户

发布于 2018-10-21 00:44:43

现在,您可以将partner作为int。您不能在int上调用方法,因为它是一个基本类型。然而,这在您的上下文中没有多大意义,因为您正在删除w的合作伙伴,而不是partner的合作伙伴。

代码语言:javascript
运行
复制
if (w.hasPartner() == true) { 
    w.erasePartner();
}

而且,您的代码没有多大意义。为什么合伙人是个int?为什么它不是一个Person对象。您可以将代码更改为:

代码语言:javascript
运行
复制
private Person partner;

代码语言:javascript
运行
复制
public Person getPartner() {
    return partner;
}

所以partner指向另一个Person对象,而不是int

票数 1
EN

Stack Overflow用户

发布于 2018-10-21 01:16:13

如果要删除合作伙伴的合作伙伴,则需要能够获得partner字段对应的partner

给定您的代码,每个Person都应该有一个对应的id,即int,这是partner字段存储的值。您将需要某种方式来存储这些映射,比如驻留在Person类之外的Person,每当您创建Person时,您必须将它连同它的id一起放在映射中(只要它是唯一的,就可以生成它)。

使用此映射,您可以访问对应于合作伙伴intint并擦除其合作伙伴。

代码语言:javascript
运行
复制
if (w.hasParter()) {
  Person partner = personMap.get(w.getPartner());
  partner.erasePartner()
}

假设合作伙伴存在于地图中(您可能需要检查它)。

票数 0
EN

Stack Overflow用户

发布于 2018-10-21 01:30:06

好吧我想明白了。我做了另一种方式。检查每个人和测试人员,看看person p是否是firstChoice的伙伴,然后删除p的合作伙伴。看上去似乎很长,但效果很好:)

代码语言:javascript
运行
复制
for (Person p : list1) {
    if (p.getPartner() == firstChoice) {
    p.erasePartner();
                }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52911190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档