Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 10.01.2018
Сообщений: 105
1

Java стратегия, итератор, композиция

07.11.2018, 23:15. Показов 880. Ответов 1

Author24 — интернет-сервис помощи студентам
Добрый день! Буду признателен, если "разжуете" и по возможности поможете с кодом вот в такой задачке:

1. Сначала требуется создать два класса: Person, PersonList
Класс Person имеет следующие свойства: firstname, lastname, age

Класс PersonList содержит список персон и следующие методы:

void add (Person p) - добавляет Person p
Person findPerson (Search s)- находит person соответственно критерию поиска(ниже)
Iterator <Person> (Search s) находит все person, которые соответствуют критерию поиска и возвращает iterator с найденными person.

2. Стратегии поиска:

Класс Search определяет стратегию, чтобы решить, соответствует ли объект person определенному критерию поиска.

Интерфейс стратегии:

interface Search {
boolean searchmatches (Person p);
}

метод searchmatches() возвращает true, когда person p соответствует определенному критерию поиска.

Список стратегий:
- Поиск по имени
- Поиск по имени и фамилии
- Поиск по начальной букве в имени
- Поиск по людям, которые старше 18 лет
- Поиск по определенному промежутку в возрасте (например, люди между 21 и 48 годами)

3. Композиция:

Класс CompositionStrategy. Эта стратегия содержит список с вышеперечисленными стратегиями и содержит два подкласса:
- ANDComposition- возвращает метод searchmatches() в значении true, если выполнены все критерии поиска.
- ORComposotition - возвращает метод searchmatches() в значении true, если выполнен как минимум один критерий поиска.

Вопросы у меня следующие:

Как реализовать поиск с "прицепленными стратегиями"? Проблема в том, что по отдельности я реализацию конкретно итератора как такового и прочая понимаю, но не могу это дело пока "собрать" и пытаюсь понять, как.

У меня проблема в понимании, как связать Search s с поиском, итератором и классами стратегий и как реализовать поиск с учетом, что данные разнородные (имя и фамилия - string, возраст должен высчитываться как int)

С уважением и заранее спасибо

За код не пинайте, все в начальной стадии, когда умом понятно, что именно требуется, но пока не хватает опыта реализации, что и пытаюсь понять, так как начал и запутался.

Main:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.util.Scanner;
 
public class Main {
 
    public static  void  main(String[] args){
 
 
 
        System.out.println(" Search:");
        System.out.println("1. First name search");
        System.out.println("2. Last name search");
        System.out.println("3. Search by first letter");
        System.out.println("4. Search by age >18");
        System.out.println("5. Age range search");
 
        Scanner scan = new Scanner(System.in);
        int choice = scan.nextInt();
 
 
        switch (choice){
            case 1:  //return new FirstnameSearch();
            case 2: //return new FirstLastnameSearch();
            case 3: //return new FirstLetterSearch();
            case 4: //return new MinAgeSearch();
            case 5: //return new RangeSearch();
        }
 
    }
}
Person

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.util.ArrayList;
 
public class Person extends ArrayList<Person> {
 
    String firstname;
    String lastname;
    int age;
 
    public Person(String firstname, String lastname, int age) {
 
        this.firstname = firstname;
        this.lastname = lastname;
        this.age = age;
    }
 
    public String getFirstname() {
        return firstname;
    }
 
    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }
 
    public String getLastname() {
        return lastname;
    }
 
    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
 
 
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.util.ArrayList;
import java.util.Iterator;
 
public class PersonList extends Person {
 
private Person person;
 
   private ArrayList <Person>  personlist =  new ArrayList <>();
 
    public PersonList(String firstname, String lastname, int age) {
        super(first, lastname, age);
    }
 
 
    void add ( Person p){
 
       personlist.add(p);
       }
 
     Person findPerson (Search s) {
 
 
 
 
     }
   /*
   public  Iterator <Person> personIterator (Search s) {
       while (personIterator(s.searchmatches(person) == )
       return ;
 
*/
 
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class FirstNameSearch implements Search{
 
    @Override
    public boolean searchmatches(Person p) {
 
        if (p != null) {
            for (int i = 0; i < p.size(); i++) {
                Person person = this.p.get(i);
                if(person.getFirstname() == this.firstname){
                    return  true;
                }
 
            }
        }
        else return false;
 
    }
}

Java
1
2
3
4
5
public interface Search {
 
    boolean searchmatches (Person p);
 
    }
Остальные стратегии еще не реализовал, как и итератор, потому он в комментарии, потому что запутался, как именно. Буду благодарен за подсказки.

Добавлено через 7 часов 6 минут
Дописал немного код и остались вопросы:
1. Как реализовать итератор?
2. Как вывести значения, соответствуют ли данные критериям поиска?
3. Как это дело вывести на консоль?

Если можно, проверьте, пожалуйста код) Я там запутался малость)) Буду благодарен за любую помощь

main
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Main {
 
    public static  void  main(String[] args){
 
 
 
 
        Search firstname = new FirstNameSearch();
        Search firstlastname = new FirstLastnameSearch();
        Search minage = new MinAgeSearch();
        Search firstletter = new FirstLetterSearch();
        Search range = new RangeSearch();
 
 
        System.out.println("First name search results:");
        PersonList.printPersons(firstname.);
 
        System.out.println("First and last name search results:");
        PersonList.printPersons(firstlastname) ; //пофиксить
 
        System.out.println("First letter search results: ");
        PersonList.printPersons(firstletter);   //пофиксить
 
        System.out.println("Minimal age search");
        PersonList.printPersons(minage); //пофиксить
 
        System.out.println("Range search");
        PersonList.printPersons(range); //пофиксить
 
        
    }
}
класс personList

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.util.ArrayList;
import java.util.Iterator;
 
public class PersonList extends Person  {
 
   private ArrayList <Person>  person =  new ArrayList <>();
 
    public PersonList(String firstname, String lastname, int age) {
        super(firtname,  lastname, age);
    }
 
 
    void add ( Person p){
 
        person.add(new Person("Annika", "Baumgartner", 12));
        person.add(new Person("Max", "Schmidt", 36));
        person.add(new Person("Alex", "Smith", 43));
        person.add(new Person("Alexandra", "Miller", 23));
       }
 
     Person FindPerson (Search s) {
 
             }
 
   public  Iterator <Person> personIterator (Search s) {
       while (
       return ;
 
 
 
}
    public static void printPersons(Person p){
   for (Person person: p){
       System.out.println("Person : [ First name : " + person.getFirstname() + ", Last name : " + person.getLastname()
               + "Age : " +person.getAge());
   }
    }
 
 
}
Интерфейс Search

Java
1
2
3
public interface Search {
    boolean searchmatches(Person p);
   }
Стратегия FirstNameSearch
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class FirstNameSearch implements Search {
 
    @Override
    public boolean searchmatches(Person p) {
        for (Person person : p) {
            if (person.getFirstname().startsWith("S")) {
                return true;
            }
        }
 
        return false;
    }
}
Стратегия FirstLastNameSearch
Java
1
2
3
4
5
6
7
8
9
10
11
12
public class FirstLastNameSearch implements Search {
    @Override
    public boolean searchmatches(Person p) {
 
        for (Person person : p) {
            if (person.getFirstname().equalsIgnoreCase("Alex")&& person.getLastname().equalsIgnoreCase("Smith")){
                return true;
            }
        }
        return false;
    }
}
Стратегия MinAgeSearch
Java
1
2
3
4
5
6
7
8
9
10
11
12
public class MinAgeSearch implements Search {
 
    @Override
    public boolean searchmatches(Person p) {
        for (Person person : p) {
            if (person.getAge() >18){
                return true;
            }
        }
        return false;
    }
}
Стратегия FirstletterSearch

Java
1
2
3
4
5
6
7
8
9
10
11
public class FirstletterSearch implements  Search {
    @Override
    public boolean searchmatches(Person p) {
        for (Person person : p) {
        if (person.getFirstname().startsWith("S")){
            return true;
        }
    }
        return false;
    }
}
Стратегия RangeSearch

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class RangeSearch implements Search {
 
 
    @Override
    public boolean searchmatches(Person p) {
        for (Person person : p) {
            if (person.getAge() > 18 && person.getAge() < 47) {
                return true;
            }
 
        }
 
        return false;
    }
}
Добавлено через 57 секунд
Дописал немного код и остались вопросы:
1. Как реализовать итератор?
2. Как вывести значения, соответствуют ли данные критериям поиска?
3. Как это дело вывести на консоль?

Если можно, проверьте, пожалуйста код) Я там запутался малость)) Буду благодарен за любую помощь

main
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Main {
 
    public static  void  main(String[] args){
 
 
 
 
        Search firstname = new FirstNameSearch();
        Search firstlastname = new FirstLastnameSearch();
        Search minage = new MinAgeSearch();
        Search firstletter = new FirstLetterSearch();
        Search range = new RangeSearch();
 
 
        System.out.println("First name search results:");
        PersonList.printPersons(firstname.);
 
        System.out.println("First and last name search results:");
        PersonList.printPersons(firstlastname) ; //пофиксить
 
        System.out.println("First letter search results: ");
        PersonList.printPersons(firstletter);   //пофиксить
 
        System.out.println("Minimal age search");
        PersonList.printPersons(minage); //пофиксить
 
        System.out.println("Range search");
        PersonList.printPersons(range); //пофиксить
 
        
    }
}
класс personList

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.util.ArrayList;
import java.util.Iterator;
 
public class PersonList extends Person  {
 
   private ArrayList <Person>  person =  new ArrayList <>();
 
    public PersonList(String firstname, String lastname, int age) {
        super(firtname,  lastname, age);
    }
 
 
    void add ( Person p){
 
        person.add(new Person("Annika", "Baumgartner", 12));
        person.add(new Person("Max", "Schmidt", 36));
        person.add(new Person("Alex", "Smith", 43));
        person.add(new Person("Alexandra", "Miller", 23));
       }
 
     Person FindPerson (Search s) {
 
             }
 
   public  Iterator <Person> personIterator (Search s) {
       while (
       return ;
 
 
 
}
    public static void printPersons(Person p){
   for (Person person: p){
       System.out.println("Person : [ First name : " + person.getFirstname() + ", Last name : " + person.getLastname()
               + "Age : " +person.getAge());
   }
    }
 
 
}
Интерфейс Search

Java
1
2
3
public interface Search {
    boolean searchmatches(Person p);
   }
Стратегия FirstNameSearch
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class FirstNameSearch implements Search {
 
    @Override
    public boolean searchmatches(Person p) {
        for (Person person : p) {
            if (person.getFirstname().startsWith("S")) {
                return true;
            }
        }
 
        return false;
    }
}
Стратегия FirstLastNameSearch
Java
1
2
3
4
5
6
7
8
9
10
11
12
public class FirstLastNameSearch implements Search {
    @Override
    public boolean searchmatches(Person p) {
 
        for (Person person : p) {
            if (person.getFirstname().equalsIgnoreCase("Alex")&& person.getLastname().equalsIgnoreCase("Smith")){
                return true;
            }
        }
        return false;
    }
}
Стратегия MinAgeSearch
Java
1
2
3
4
5
6
7
8
9
10
11
12
public class MinAgeSearch implements Search {
 
    @Override
    public boolean searchmatches(Person p) {
        for (Person person : p) {
            if (person.getAge() >18){
                return true;
            }
        }
        return false;
    }
}
Стратегия FirstletterSearch

Java
1
2
3
4
5
6
7
8
9
10
11
public class FirstletterSearch implements  Search {
    @Override
    public boolean searchmatches(Person p) {
        for (Person person : p) {
        if (person.getFirstname().startsWith("S")){
            return true;
        }
    }
        return false;
    }
}
Стратегия RangeSearch

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class RangeSearch implements Search {
 
 
    @Override
    public boolean searchmatches(Person p) {
        for (Person person : p) {
            if (person.getAge() > 18 && person.getAge() < 47) {
                return true;
            }
 
        }
 
        return false;
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2018, 23:15
Ответы с готовыми решениями:

Композиция в java
Можно ли в композиция использовать абстрактные классы и интерфейсы в качестве полей...

Реализация связи "композиция" в Java
Всем доброго времени суток! Возможно усложняю себе жизнь, но сегодня весь день ломаю голову над...

Итератор. Задание из книги "Thinking in Java". Брюс Эккель
Взялся выполнить следующее задиние из книги &quot;Thinking in Java&quot;: Напишите метод, который использует...

Выяснить, что представляют из себя отношения Ф композиция Ф и Ф композиция Ф^{-1}
Добрый день. До этого у меня было такое задание: Выяснить, какими из свойств: рефлексивность,...

1
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
08.11.2018, 02:02 2
Цитата Сообщение от RednexRampage Посмотреть сообщение
public class Person extends ArrayList<Person>
Зачем Person наследовать от ArrayList'a? Как результат у Вас:
Java
1
2
public boolean searchmatches(Person p) {
        for (Person person : p) {
1. Это выглядит дико: передали Персону, а потом перебираете всех Персон, которые есть в Персоне
2. По заданию "соответствует ли объект person определенному критерию". Один объект, а не все. Так что никакого цикла в searchmatches быть не должно

Зачем выкладывать код, который не компилируется? Вы не видите в чем тут ошибка? Если да, то про итераторы рано думать
Цитата Сообщение от RednexRampage Посмотреть сообщение
public *Iterator <Person> personIterator (Search s) {
while (
return ;
}
0
08.11.2018, 02:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2018, 02:02
Помогаю со студенческими работами здесь

Реализовать двусвязный список (list), итератор (iterator) и константный итератор (сonst_iterator) для списка
не могу понять что должно быть результатом. может подскажете примеры? пожалуйста. Задание:...

Особый итератор словаря. Итератор возвращающий нужные комбинации
Немогу разобраться, как написать итератор. У меня есть словарь, ключи это координаты, а значения...

Особый итератор словаря. Медленный итератор
Не могу разобраться, как написать итератор. У меня есть словарь, ключи это координаты, а значения...

Стратегия
Помогите пожалуйста сделать программу по любой формули на тему Решение Игры в смешанных стратегиях.

Стратегия?
Всем доброго времени суток! Объясните пожалуйста мне - нубу, какую лучше выбрать стратегию в SEO...

Экономическая стратегия
Подскажите интересный сабж? Чтобы было интересно, только не цивилизация. Можно свое фермерское...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru