Chcę zrobić pewne losowanie, w którym każdy obiekt ma różne szanse na zostanie wylosowanym.
np.
1 - 10%
2 - 5%
3 - 32%
4 - (pozostałe) 53%
Chcę później łatwo dodawać kolejne obiekty z różnymi szansami. Ma ktoś pomysł jak to zrobić?
Chcę zrobić pewne losowanie, w którym każdy obiekt ma różne szanse na zostanie wylosowanym.
np.
1 - 10%
2 - 5%
3 - 32%
4 - (pozostałe) 53%
Chcę później łatwo dodawać kolejne obiekty z różnymi szansami. Ma ktoś pomysł jak to zrobić?
Robisz tablice 100-elementowa, tworzysz obiekty i dodajesz pokolei do tablicy referencje do nich (tyle referencji w tablicy ile % szans ma obiekt). A potem to juz prosto:
Object wylosowany = obiekty[(int)(Math.random() * 100)];
Naiwne rozwiązanie w pierwszej odpowiedzi, opisane i zaimplementowane rozwiązanie z czasem stałym w drugiej. Powodzenia :)
Ok, zrobiłem to tak:
wartości zapisałem w statycznej mapie do której dodałem kilka rekordów:
static HashMap<String, Double> people = new HashMap<String, Double>();
MapObject.people.put("Ala", 0.3);
MapObject.people.put("ma", 0.3);
A następnie tam gdzie chciałem przeiterowałem ją tak:
double r = Math.random();
double value = 0.0;
for (Map.Entry<String, Double> entry : MapObject.people.entrySet()) {
value += entry.getValue();
if(r < value) {
subtype = entry.getKey();
break;
}
}
if(subtype == "") {
subtype = "kota";
}
Co o tym myślicie?:)
int randomIndex(int [] weights) {
int sum = 0;
for(int x : weights)
sum += x;
int r = generator.nextInt(sum);
for(int i=0; i<weights.length; ++i) {
r -= weights[i];
if (r<0)
return i;
}
assert r>=0;
return -1;
}
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.