Я застрял с поведением моего кода, которое я не могу объяснить сам. Я опубликую соответствующий код и задам вопрос:
//Uses brute force and existing functions to create and check for equilibria
static void getEquis(List<Integer> values, int depth) {
if (values.size() == depth) {
for(int i = 0; i < numOfAgents; i++) {
agents[i].setVote(values.get(i).intValue());
}
for(int i = 0; i < numOfAgents; i++) {
agents[i].setDoVote(true);
if(isEqui()==true) {
int votes[] = new int[numOfAgents];
boolean doVotes[] = new boolean[numOfAgents];
for(int j = 0; j < numOfAgents; j++) {
votes[j] = 5;
doVotes[j] = true;
//votes[j] = agents[j].getVote();
//doVotes[j] = agents[j].getDoVote();
}
addEqui(new Equi(votes, doVotes));
}
agents[i].setDoVote(false);
if(isEqui()==true) {
int votes[] = new int[numOfAgents];
boolean doVotes[] = new boolean[numOfAgents];
for(int j = 0; j < numOfAgents; j++) {
votes[j] = 5;
doVotes[j] = true;
//votes[j] = agents[j].getVote();
//doVotes[j] = agents[j].getDoVote();
}
addEqui(new Equi(votes, doVotes));
}
}
Обратите внимание, что я намеренно оставил там комментарии (voice [j] = agents [j] .getVote ();), так как это то, что он должен делать, вот так голосов [j] = 5; и следующая строка только для тестирования.
private static class Equi
{
private int vote[] = new int[numOfAgents];
private boolean doVote[] = new boolean[numOfAgents];
public Equi(int[] votes, boolean[] doVotes)
{
for(int i = 0; i < numOfAgents; i++) {
this.vote[i] = votes[i];
this.doVote[i] = doVotes[i];
}
}
public int[] getVote() {
return this.vote;
}
public boolean[] getDoVote() {
return this.doVote;
}
public void print() {
for(int i = 0; i < numOfAgents; i++) {
System.out.println("Agent " + (i+1) + ": " + agents[i].doVote + " Wahl: " + agents[i].vote);
}
System.out.println("Solution: " + computeMean());
}
}
//Adds a new equilibrium to the equilibria array
public static void addEqui(Equi equi)
{
Equi store[] = new Equi[equilibria.length + 1];
for(int i = 0; i< equilibria.length; i++) {
store[i] = equilibria[i];
}
store[equilibria.length] = equi;
equilibria = store;
}
Теперь, если я распечатываю результаты массива равновесий, я получаю
Агент 1: ложь Валь: 100 Агент 2: ложь Валь: 100 Решение: 0,0 агент
1: ложь Валь: 100 Агент 2: ложь Валь: 100 Решение: 0.0 Агент 1:
false Wahl: 100 Agent 2: false Wahl: 100 Solution: 0.0 Agent 1: false
Валь: 100 Агент 2: ложь Валь: 100 Решение: 0,0
Это реализуется путем запуска этого в main:
for(int i = 0; i < equilibria.length; i++) {
equilibria[i].print();
}
В моем понимании это всегда должно давать мне 5 и правда, но это поведение очень странно для меня. У вас есть объяснение этому? Если вам нужны другие части кода, пожалуйста, прокомментируйте, и я отредактирую и добавлю его.