Итак, в моем симуляторе я пытаюсь более точно контролировать, какой шанс для пола будет существо, когда оно будет создано. Первоначально у меня просто был прямой 50-процентный шанс для каждого использования RND, однако я понимаю, что это вызовет проблемы позже. Поэтому я думал о каждом создании существа и определении пола, я мог бы изменить/настроить% шансов для каждого пола на основе текущего соотношения, например. когда нынешняя популяция составляет 70% мужчин и 30% женщин. Таким образом, у следующего существа будет 70% шанс стать женщиной и сделать это так. Моя проблема заключается в том, что я борюсь с хорошим способом реализации этого какая-то информация ниже:Java: гендерный контроль
public void setGender2() {
int fper = gcount.get(ctype+Gender.F); int mper = gcount.get(ctype+Gender.M);
int tcc = fper + fper;
int gmf = rNum(0,100); //Calls the random number method.
if (fper == mper) { //When first used the total will be 0 so do this.
gchance = 50;
if (gmf <= gchance) g = Gender.F; //If the random number is less than the calculated gchance %.
else g = Gender.M;
}
else {
gchance = (int)(100-(((double)gcount.get(ctype+g)/(double)tcc)*100)); //Calculates the % for a gender.
if (fper < mper) { //When there is less females...
if (gmf <= gchance) g = Gender.F;
else if (gmf > gchance) g = Gender.M;
}
else if (mper < fper) { //When there is less males...
if (gmf <= gchance) g = Gender.M;
else if (gmf > gchance) g = Gender.F;
}
}
gcount.replace(ctype+g, gcount.get(ctype+g)+1); //update the count for this creature type + gender.
}
Пол информация хранится в HashMap называется gcount. Каждый тип существа & пол является ключевым, например. Рыба (ctype) + Пол - и затем значение, сохраненное вместе с ним, которое изменяется командой замены внизу.
Вещь реализует его таким образом, просто кажется очень ... неопрятным, поэтому надеясь, что у других были некоторые лучшие предложения ...?
Спасибо.
Небольшое замечание: Ваши имена переменных не очень хороши. Использование понятных (и более длинных) имен сделает ваш код более читаемым. –
Возможно, это тема для http://codereview.stackexchange.com/ ..? – svenhornberg
bool isMale = Random.nextFloat()> (countAllMale/countAll) – ElDuderino