Объедините два метода.int не может быть разыменован - PullRequest
0 голосов
/ 21 октября 2018

Если у женщины есть партнер, сотрите партнера этого партнера.Мне нужно отыскать ее партнера, а затем сделать этого партнера одиноким.Как мне объединить 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 голосов
/ 21 октября 2018

Вы должны иметь возможность получить Persona, которому соответствует поле partner, если вы хотите стереть партнера партнера.

Учитывая код, который у вас есть, у каждого Person должен быть соответствующий идентификатор, который является int, то есть значением, которое хранит поле partner.Вам понадобится какой-то способ хранения этих отображений, например Map<Integer, Persona>, который находится вне класса Person, и всякий раз, когда вы создаете Person, вы должны поместить его на карту вместе с его идентификатором (который вы можете сгенерировать).как бы вам ни хотелось, пока он уникален).

С помощью этой карты вы можете получить доступ к Person, который соответствует партнеру int, и стереть его партнера

if (w.hasParter()) {
  Person partner = personMap.get(w.getPartner());
  partner.erasePartner()
}

, предполагая, чтопартнер существует на карте (которую вы можете проверить).

0 голосов
/ 21 октября 2018

Хорошо, я вроде понял это.Я сделал это по-другому.Проходит через каждого человека и проверяет, является ли человек p партнером firstChoice, а затем удаляет партнера p.Вроде долго, кажется, но это работает:)

for (Person p : list1) {
    if (p.getPartner() == firstChoice) {
    p.erasePartner();
                }
0 голосов
/ 21 октября 2018

Прямо сейчас у вас есть partner как int.Вы не можете вызывать методы для int, так как это примитивный тип.Однако это не имеет большого смысла в вашем контексте, поскольку вы удаляете партнера w, а не партнера partner.Вместо этого просто позвоните:

if (w.hasPartner() == true) { 
    w.erasePartner();
}

Также ваш код не имеет особого смысла.Почему партнер int?Почему бы это не был Person объект.Вы можете изменить свой код на:

private Person partner;

И

public Person getPartner() {
    return partner;
}

, чтобы partner указывал на другой объект Person вместо int

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...