package projetodealgoritmos;
import java.util.Random;
public class Aleatorios {
public static void main (String[] args) {
Random random = new Random(System.currentTimeMillis());
int i;
i = random.nextInt();
if (i < 0){
i = i * (-1);
}
System.out.println(i);
}
}
[b]Boa noite! Pessoal eu estava analisando este código, contudo não consegui entender algumas coisas, são elas:
- Pensei que a classe Random gerasse somente números positivos, contudo quando eu tiro a parte do código que deixa o numero positivo, por vezes surge um negativo quando eu executo;
- Se possível gostaria que alguém me esclaresse sobre o que método next faz, pois ja li algumas coisas, todavia entendi parcialmente a idéia;
- E por último por que quando inserimos um valor no parentese de i = random.nextInt() o número se limita a esse valor inserido, e porque o valor máximo que chega como resposta é o valor de um a menos do valor inserido? Exemplo se for o valor 100, a resposta pode ser no máximo 99?
Desde ja agradeço a ajuda. Obrigado![/b]
Pensou errado. Ele pode retornar qualquer inteiro, positivo ou negativo.
Qual dos métodos next?
[quote=Thiago Sylas]E por último por que quando inserimos um valor no parentese de i = random.nextInt() o número se limita a esse valor inserido, e porque o valor máximo que chega como resposta é o valor de um a menos do valor inserido? Exemplo se for o valor 100, a resposta pode ser no máximo 99?
Desde ja agradeço a ajuda.[/b][/quote]
Por que foi implementado assim. Dentro do parenteses vai o tamanho do seu espaço de números. Como o nextInt começa em 0, se vc informar 10, você terá números de 0 até 9, totalizando 10 possíveis números gerados.
Isso também facilita na hora de sortearmos um número dentro de um array. Pois podemos simplesmente colocar o tamanho do array no parênteses.
Bem não sei se estou respondendo a sua pergunta, mas o next a que me refiro é o pertencente a classe Random.
Cara, acho que o ViniGodoy tava falando de qual next da classe random, visto que tem um next(int i), nextBoolean(), nextBytes(), nextDouble() etc…
Hummmm, obrigado!
Bem o que eu quero saber é em relação ao nextInt(), mas acredito que os outros também sigam um padrão pois seguem o mesmo método next, então se não for muito trabalho e/ou incomodo gostaria que me explicasse de uma forma geral também.
E muito obrigado ViniGodoy, ja me ajudou bastante, falta apenas esse detalhe para que eu possa fechar o raciocínio.
Ué, e qual é a dúvida? O nextInt() vai gerar um número inteiro qualquer, dentro de qualquer possibilidade de número disponível numa variável do tipo int.
Ele também garante uma distribuição mais ou menos uniforme, quando você gerar milhões de números.
A dúvida é: ja que o next faz isso, o que o Random como você colocou [quote]Ele pode retornar qualquer inteiro, positivo ou negativo.[/quote] Suas funções são semelhantes? Resumindo, qual a diferença entre a classe Random e o método next, sei que o next faz parte dessa classe, contudo eles não possuem um conceito que os difere?
Todo número no computador é formado por uma sequencia de bits.
A classe Random é responsável por gerar sequencias aleatórias de bits.
Os métodos iniciados com next simplesmente retornam essa sequencia dentro de um intervalo numérico qualquer.
Por exemplo, o método .nextFloat vai gerar uma sequencia aleatória de bits, e vai retornar isso numa representação tal que esteja num intervalo de 0 até 1.
Se você olhar a implementação da classe random, vará que toda ela se baseia num método chamado next, e que esse método simplesmente gera uma sequencia aleatória de N bits, sem se preocupar com seu valor numérico exato.
Hummmm, compreendi agora!
Obrigado ViniGodoy.