Как применить соответствующие затраты для выбора рейтинга - PullRequest
1 голос
/ 23 апреля 2019

У меня есть список из 4 вариантов действий

Activities
Activity 1
Activity 2
Activity 3
Activity 4

И у меня есть список людей, которые выбрали 4 вида деятельности, упорядоченные по порядку, например

Person    Choices (1st,2nd,3rd,4th)
Person 1  2,3,1,4
Person 2  3,1,4,2
...

Я пытаюсь выделитьстоил ранжированным выборам исходя из их положения и просто удивлялся, как я мог это сделать.Примером является Лицо 1, чей первый выбор - это мероприятие 2, и его стоимость равна 1. Его второй выбор - это мероприятие 3, а стоимость - 2, потому что он находится в положении 2 и так далее.Я добавляю эти затраты в списки, потому что этот список затрат мне нужен позже в том же порядке.

Код, который я пробовал

List<Integer> cost = new ArrayList<Integer>();
for(Person p: people){
 for (int i = 0; i < p.getChoices().size(); i++) {

  cost.add(p.getChoices(i+1);
 }
}

Просто дополнительный контекст. Список расходов будетиспользуется для заполнения сетки транспортных проблем, где источники представлены действиями, как показано ниже.Источники в сетке находятся в фиксированных положениях, поэтому, глядя на человека 1. Занятие 2 было их первым выбором, Занятие 3 - их 2, Занятие 1 - их 3 и Занятие 4 - их 4-е.

  Person 1 | Person2 | Person n
1     3         2
2     1         4
3     2         1
4     4         3

Я продолжаюзапутаться в том, как применить это, как это должно быть просто.В моих предыдущих реализациях я постоянно получал список расходов на 1,2,3,4.Я не могу обернуться вокруг теории по какой-то причине (зонд, потому что это 5 утра XD).Я открыт для любой теории или псевдокода.Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Если стоимость действия для человека является его позицией в выборе, вы можете объявить метод costOf в классе Person:

public class Person {
    private final List<Integer> choices = new ArrayList<>();

    public Person(Integer... choices) {
        this.choices.addAll(Arrays.asList(choices));
    }

    public List<Integer> getChoices() {
       return choices;
    }

    public int costOf(Integer activity) {
        return choices.indexOf(activity)+1;
    }
}

Чтобы напечатать сетку, вы должны сделать это:

    List<Person> persons = Arrays.asList(
                new Person(2,3,1,4),
                new Person(3,1,4,1)
            );
    // Print grid
    for (int activity = 1; activity <= 4; ++activity) {
        System.out.print(activity);
        for (Person p: persons) {
            System.out.print(" ");
            System.out.print(p.costOf(activity));
        }
        System.out.println();
    }

Это напечатает:

1 3 2
2 1 0
3 2 1
4 4 3

Вы можете видеть, что есть ноль, потому что у второго человека нет 2 в его выборе.

Предполагая, что этоопечатка, и вы заменяете второй 1 на 2, вы получаете:

1 3 2
2 1 4
3 2 1
4 4 3

То, что ожидалось.

0 голосов
/ 23 апреля 2019

Я пишу пример кода. Я написал код для вас согласно моему пониманию вашего вопроса.

Персональный класс

import java.util.ArrayList;

public class Person {
    ArrayList<Integer> choices = new ArrayList<>();

    public ArrayList<Integer> getChoices() {
       return choices;
    }

    public void setChoices(ArrayList<Integer> choices) {
       this.choices = choices;
    }
}

Основной метод

public class MainMethod {

    public static void main(String[] args) {

       Person person1 = new Person();
       ArrayList<Integer> activity1 = new ArrayList<>();
       activity1.add(2);
       activity1.add(3);
       activity1.add(1);
       activity1.add(4);
       person1.setChoices(activity1);

       Person person2 = new Person();
       ArrayList<Integer> activity2 = new ArrayList<>();
       activity2.add(2);
       activity2.add(4);
       activity2.add(1);
       activity2.add(3);
       person2.setChoices(activity2);

       Person person3 = new Person();
       ArrayList<Integer> activity3 = new ArrayList<>();
       activity3.add(1);
       activity3.add(3);
       activity3.add(4);
       activity3.add(2);
       person3.setChoices(activity3);

       Person person4 = new Person();
       ArrayList<Integer> activity4 = new ArrayList<>();
       activity4.add(4);
       activity4.add(3);
       activity4.add(1);
       activity4.add(4);
       person4.setChoices(activity4);

       ArrayList<Person> persons = new ArrayList<>();
       persons.add(person1);
       persons.add(person2);
       persons.add(person3);
       persons.add(person4);

       int i = 1;
       for(Person person :persons) {
           System.out.println("Person"+i);
           //List
           person.getChoices().forEach(System.out::println);
           i++;
       }
       System.out.println("**********************");
       //If you need cost list. I gave you option to store in list as well.
       int j = 1;
       for(Person person :persons) {
        System.out.println("Person"+j);
        ArrayList<Integer> cost = person.getChoices();
        cost.stream().forEach(System.out::println);
        i++;
       }
   }
}

Если ваше требование другое, уточните и дайте мне знать.

...