Observe que essa abordagem é mais tendenciosa e menos eficiente do que uma nextIntabordagem, https://stackoverflow.com/a/738651/360211
Um padrão padrão para realizar isso é:
Min + (int)(Math.random() * ((Max - Min) + 1))
A função da biblioteca Java Math Math.random () gera um valor duplo no intervalo [0,1). Observe que esse intervalo não inclui o 1.
Para obter um intervalo específico de valores primeiro, você precisa multiplicar pela magnitude do intervalo de valores que deseja cobrir.
Math.random() * ( Max - Min )
Isso retorna um valor no intervalo [0,Max-Min), em que 'Max-Min' não está incluído.
Por exemplo, se você quiser [5,10), precisará cobrir cinco valores inteiros para usar
Math.random() * 5
Isso retornaria um valor no intervalo [0,5), em que 5 não está incluído.
Agora você precisa mudar esse intervalo para o que você está segmentando. Você faz isso adicionando o valor mínimo.
Min + (Math.random() * (Max - Min))
Agora você receberá um valor no intervalo [Min,Max). Seguindo o nosso exemplo, isso significa [5,10):
5 + (Math.random() * (10 - 5))
Mas, isso ainda não inclui Maxe você está recebendo um valor duplo. Para Maxincluir o valor, você precisa adicionar 1 ao parâmetro range (Max - Min)e truncar a parte decimal convertendo para int. Isso é realizado via:
Min + (int)(Math.random() * ((Max - Min) + 1))
E aí está. Um valor inteiro aleatório no intervalo [Min,Max]ou pelo exemplo [5,10]:
5 + (int)(Math.random() * ((10 - 5) + 1))