Почему все мои агенты женского пола?
У меня есть 10 универсальных агентов:
public class Agent {
private Context<Object> context;
private Geography<Object> geography;
public int id;
public boolean isFemale;
public double random;
public Agent(Context<Object> context, Geography<Object> geography, boolean isFemale, double random) {
this.context = context;
this.geography = geography;
this.isFemale = isFemale;
this.random = random;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public boolean isFemale() {
return isFemale;
}
public void setFemale(boolean isFemale) {
this.isFemale = isFemale;
}
public double getRandom() {
return random;
}
public void setRandom(double random) {
this.random = random;
}
public void methods {
... does things
}
Агенты создаются в контексте географии (широта и долгота). Я пытаюсь сконструировать своих агентов как случайных мужчин или женщин. Код, который я использую в конструкторе контекста для создания агентов, приведен ниже:
Agent agent = null;
boolean isFemale = false;
for (int i = 0; i < 10; i++) {
double random = RandomHelper.nextDoubleFromTo(0, 1);
if (random > 0.33){
isFemale = true;
}
agent = new Agent(context, geography, isFemale, random);
context.add(agent);
Coordinate coord = new Coordinate(-79.6976, 43.4763);
Point geom = fac.createPoint(coord);
geography.move(agent, geom);
}
Когда я проверяю код, я понимаю, что все они женщины. Что я делаю неправильно? Во всяком случае, я бы подумал, что все они будут мужчинами, поскольку булевы значения по умолчанию ложны.
2 ответа
Ваш boolean
не обновляется для каждой итерации, как только она становится isFemale = true
это остается верным для других значений. Вы можете добавить еще часть, чтобы установить его false
,
for (int i = 0; i < 10; i++) {
isFemale = false;//Set it here
double random = RandomHelper.nextDoubleFromTo(0, 1);
if (random > 0.33){
isFemale = true;
//...
ИЛИ ЖЕ
if (random > 0.33){
isFemale = true;
} else {
isFemale = false;
}
ИЛИ ЖЕ
agent = new Agent(context, geography, random > 0.33, random);
Потому что, как только ваш логический тип установлен в true, он остается таким (вы никогда не устанавливаете его в false, это только одна ветвь if).
Кстати, ловя название вопроса