Проблема со списком - Java - PullRequest
1 голос
/ 31 июля 2010

Я пытаюсь создать новый экземпляр пары с указанным именем и полом и добавить в коллекции пар в методе addCouple.У меня есть другой класс под названием Пара.В этом классе у меня есть геттеры и сеттеры по имени и полу.Я попытался использовать массовую операцию для списка:

List<Dating> list1 = new ArrayList<Dating>(this.addCouple);

, но я получил ошибку "нестатическая переменная, на которую нельзя ссылаться из статического контекста".Затем я попытался использовать Collection.sort, а затем распечатать список.Я получил то же сообщение об ошибке.Поэтому я считаю, что я не знаю, как использовать this.addList.Может ли кто-нибудь сказать мне, как его использовать.Должен ли я использовать this.addList?Заранее спасибо.

public class Dating
{

  private List<Male> maleList;
  private List<Female> femaleList; 


  public Dating()
  {

    super();
    maleList = new ArrayList<Single>();
    femaleList = new ArrayList<Single>();
  }


  public void lists()
  { 
   this.addList("Jack","Male",'m');
   this.addList("Mike","Male",'m'); 

   this.addList("Lynda","Female",'f'); 
   this.addList("Katie","Female",'f'); 
  }


   public static void addCouple (String aName, char aGender)
   {
      Collections.sort(this.addList);
      for (Couple group : this.addList)
      {
         System.out.println(" " + group.getName() + " " + group.getGender());
      }

   }

Ответы [ 4 ]

8 голосов
/ 31 июля 2010

Я думаю, что у вас гораздо большие проблемы, чем это.Классы Мужской, Женский, Одинокий?Это атрибуты класса Person, а не сами по себе.Ваш дизайн нуждается в доработке.

Вам нужны классы Person и Couple.Вам также нужна модель, которая отражает реальный мир.Нравится вам это или нет, у вас могут быть пары Мужчина-Мужчина и Женщина-Женщина.

Я бы написал так.Как видите, список отлично работает:

Gender.java:

public enum Gender
{
    MALE, FEMALE;
}

MaritalStatus.java:

public enum MaritalStatus
{
    SINGLE, MARRIED, DIVORCED, WIDOWED, SEPARATED;
}

Person.java:

import java.text.DateFormat;
import java.util.Date;

public class Person
{
    private String name;
    private Date birthdate;
    private Gender gender;
    private MaritalStatus maritalStatus;

    public Person(String name)
    {
        this(name, new Date(), Gender.MALE, MaritalStatus.SINGLE);
    }

    public Person(String name, Gender gender)
    {
        this(name, new Date(), gender, MaritalStatus.SINGLE);
    }

    public Person(String name, Date birthdate)
    {
        this(name, birthdate, Gender.MALE, MaritalStatus.SINGLE);
    }

    public Person(String name, Date birthdate, Gender gender)
    {
        this(name, birthdate, gender, MaritalStatus.SINGLE);
    }

    public Person(String name, Date birthdate, Gender gender, MaritalStatus maritalStatus)
    {
        if ((name == null) || (name.trim().length() == 0))
            throw new IllegalArgumentException("name cannot be blank or null");

        this.name = name;
        this.birthdate = ((birthdate == null) ? new Date() : new Date(birthdate.getTime()));
        this.gender = gender;
        this.maritalStatus = maritalStatus;
    }

    public String getName()
    {
        return name;
    }

    public Date getBirthdate()
    {
        return new Date(birthdate.getTime());
    }

    public Gender getGender()
    {
        return gender;
    }

    public MaritalStatus getMaritalStatus()
    {
        return maritalStatus;
    }

    @Override
    public boolean equals(Object o)
    {
        if (this == o)
        {
            return true;
        }
        if (o == null || getClass() != o.getClass())
        {
            return false;
        }

        Person person = (Person) o;

        if (!birthdate.equals(person.birthdate))
        {
            return false;
        }
        if (gender != person.gender)
        {
            return false;
        }
        if (maritalStatus != person.maritalStatus)
        {
            return false;
        }
        if (!name.equals(person.name))
        {
            return false;
        }

        return true;
    }

    @Override
    public int hashCode()
    {
        int result = name.hashCode();
        result = 31 * result + birthdate.hashCode();
        result = 31 * result + gender.hashCode();
        result = 31 * result + maritalStatus.hashCode();
        return result;
    }

    @Override
    public String toString()
    {
        return "Person{" +
               "name='" + name + '\'' +
               ", birthdate=" + DateFormat.getDateInstance(DateFormat.MEDIUM).format(birthdate) +
               ", gender=" + gender +
               ", maritalStatus=" + maritalStatus +
               '}';
    }
}

Couple.java:

public class Couple
{
    private Person ying;
    private Person yang;

    public Couple(Person ying, Person yang)
    {
        this.ying = ying;
        this.yang = yang;
    }

    public Person getYing()
    {
        return ying;
    }

    public Person getYang()
    {
        return yang;
    }

    @Override
    public String toString()
    {
        return "Couple{" +
               "ying=" + ying +
               ", yang=" + yang +
               '}';
    }
}

Dating.java:

import java.util.ArrayList;
import java.util.List;


public class Dating
{
    private List<Person> individuals = new ArrayList<Person>();
    private List<Couple> couples     = new ArrayList<Couple>();

    public static void main(String[] args)
    {
        Dating dating = new Dating();

        dating.addIndividual(new Person("Jack"));
        dating.addIndividual(new Person("Mike"));
        dating.addIndividual(new Person("Lydia", Gender.FEMALE));
        dating.addIndividual(new Person("Kate", Gender.FEMALE));

        System.out.println(dating);
    }

    public void addIndividual(Person p)
    {
        this.individuals.add(p);
    }

    public void removeIndividual(Person p)
    {
        this.individuals.remove(p);
    }

    public Person findIndividual(String name)
    {
        Person found = null;

        if (name != null)
        {
            for (Person p : this.individuals)
            {
                if (name.equals(p.getName()))
                {
                    found = p;
                    break;
                }
            }
        }

        return found;
    }

    @Override
    public String toString()
    {
        return "Dating{" +
               "individuals=" + individuals +
               ", couples=" + couples +
               '}';
    }
}
2 голосов
/ 31 июля 2010

Ваш addCouple объявлен как статический метод. Для статических методов нет this, потому что они не принадлежат экземпляру. Они принадлежат к классу.

1 голос
/ 31 июля 2010

Лучше бы вы создали класс Person, который может выглядеть примерно так:

public class Person
{
    private String name;
    private boolean male; // or use an enum GENDER if you plan to do more than male/female

    public Person(String name, boolean male)
    {
        this.name = name;
        this.male = male;
    }

    // [...] getters and setters

    public String toString()
    {
            return name + " " + (male ? "male" : "female");
    }
}

и, в зависимости от того, что вы на самом деле хотите сделать ... (немного больше информации было бы хорошо)

public class Dating
{
    private List<Person> persons;
    //[...] constructor

    public void addWhateverYouMeanWithCouple(String name, boolean male)
    {
        this.persons.add(new Person(name, male));
        System.out.println(persons);
    }
}

Я действительно не знаю, что вы ищете, это единственный фрагмент кода, который я могу вам предоставить, хотя я все еще думаю, что это не совсем то, что вы ищете.

Если вы хотите отсортировать список лиц, у вас будет реализован Comparable<Person> (см. Comparable JavaDoc ) в классе Person и предоставлена ​​логика для сравнения двух людей (например, с использованием name.compareTo(otherName)). ).

Если вы действительно хотите иметь «пары» или пары, взгляните на HashMap .

1 голос
/ 31 июля 2010

Вы должны сделать ваши члены статическими или вы должны удалить статический флаг из вашей функции.Грубо говоря, нельзя смешивать статические и нестатические вещи.

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