Witam.
Mam pytanie, jak spośród 4 wygenerowanych losowo liczb (od 1 do 6) zsumować i wyczytać 3 najwyższe a najniższą z nich odrzucić?
0
3
int sum = new Random().ints(1, 6).limit(4).sorted().skip(1).sum();
1
Zaciekawił mnie rozkład takich sum, napisałem programik liczący i wyświetlający rozkład
HashMap<Integer,Integer> counters = new HashMap<Integer,Integer>();
for(int i=3;i<=18;i++)
{
counters.put(i,0);
}
for(int i=0;i<100000;i++)
{
int sum = new Random().ints(1, 6).limit(4).sorted().skip(1).sum();
counters.put(sum,counters.get(sum) + 1);
}
for(int key: counters.keySet())
{
System.out.println(key + " " + counters.get(key));
}
Wyniki były nieprawdopodobne:
3 170
4 639
...
16 0
17 0
18 0
Wytłumaczenie takiego wyniku - potwierdzone przez rzut oka na dokumentację - jest takie: upperBounds dla metody ints
jest exclusive.
int sum = new Random().ints(1, 7).limit(4).sorted().skip(1).sum();