java - 创建类并将其添加到数组会导致奇怪的结果-Java
问题描述
我一直被我自己无法解释的代码行为所困扰。我将发布相关代码然后提出问题:
//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));
}
}
请注意,我故意将评论 (votes[j] = agent[j].getVote();) 留在那里,因为这是它应该做的, votes[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:错误 Wahl:100 代理 2:错误 Wahl:100 解决方案:0.0 代理 1:错误 Wahl:100 代理 2:错误 Wahl:100 解决方案:0.0 代理 1:错误 Wahl:100 代理 2:错误 Wahl:100 解决方案: 0.0 代理 1:错误 Wahl:100 代理 2:错误 Wahl:100 解决方案:0.0
这是通过在 main 中运行来实现的:
for(int i = 0; i < equilibria.length; i++) {
equilibria[i].print();
}
据我了解,它应该总是给我 5 并且是真的,但这种行为对我来说很奇怪。你对此有什么解释吗?如果您需要代码的任何其他部分,请发表评论,我将对其进行编辑和添加。
解决方案
推荐阅读
- machine-learning - Keras:为什么'accuracy'比'val_acc'高?
- reactjs - 将 JSX 注入到 React Native 组件中
- laravel - 动态下拉laravel服务器错误
- java - 从 Linux EXTREME VPS 读取文件时找不到文件异常
- sql - 选择具有不同字段 SQL 的多个名称
- r - ggplot2 texashousing 数据平滑短期噪声
- html - 组合 HTML 数字和选择输入
- python - Python/PyQt5 单实例和类依赖
- c++ - 继承问题中的模板
- codenameone - 应用程序未安装在 iOS 设备中