如何将适当的成本应用于排名选择
How to apply appropriate costs to ranked choices
我有 4 activity 个选项的列表
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,他的第一个选择是 activity 2,成本是 1。他们的第二个选择是 activity 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);
}
}
只是一些额外的上下文
然后,成本列表将用于填充运输问题网格,其中来源由 activity 表示,如下所示。网格中的源位于固定位置,因此在查看人 1 时。Activity 2 是他们的第一个选择,Activity 3 他们的第二个,Activity 1 他们的第三个和 Activity 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)。
我对任何理论或伪代码持开放态度。
提前致谢!
我正在编写示例代码。我已经根据我对你问题的理解为你编写了代码。
人Class
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++;
}
}
}
如果您的要求不同,请详细说明并告诉我。
如果一个人activity的成本是它在选择中的位置,你可以在class人中声明一个方法costOf
:
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
符合预期。
我有 4 activity 个选项的列表
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,他的第一个选择是 activity 2,成本是 1。他们的第二个选择是 activity 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);
}
}
只是一些额外的上下文 然后,成本列表将用于填充运输问题网格,其中来源由 activity 表示,如下所示。网格中的源位于固定位置,因此在查看人 1 时。Activity 2 是他们的第一个选择,Activity 3 他们的第二个,Activity 1 他们的第三个和 Activity 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)。 我对任何理论或伪代码持开放态度。 提前致谢!
我正在编写示例代码。我已经根据我对你问题的理解为你编写了代码。
人Class
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++;
}
}
}
如果您的要求不同,请详细说明并告诉我。
如果一个人activity的成本是它在选择中的位置,你可以在class人中声明一个方法costOf
:
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
符合预期。