Instância

15 respostas
nayaratachi

Oi pessoal, hoje fiz uma prova de Java na qual tinha uma questão que tinha que usar instância mais ou menos assim:
Uma classe possui um atributo vetor de 20 elementos, um construtor que sorteia numeros de 20 a 50 e armazena nesse vetor e um método
que mostra a interseção de dois vetores.
Alguém sabe me dizer como eu deveria resolver essa questão?

15 Respostas

M

Vc tinha que implementar esta classe ???

Como você respondeu na prova ? posta ai que vamos ver se esta certo ou errado e corriger o erro caso tenha!!!

Abraço

A

Se você tem que usar a instância, estou supondo que a classe estava pronta? É isso?

Ou você tinha que escrever a classe?

A questão era narrativa ou prática?

Dá mais detalhes aí e vamos “discutindo”…

Abraço.

G

Bem você deveria ter feito um método sortear, onde você usa umas das funções Math, que é a Math.random 20*60+ 1, por exemplo que sorteia os valores de 20 a 60.
para você colocar dentro do vetor você deveria ter formado um for, assim como o abaixo:

public void sortear(){

(int cont =0;cont<20;cont++){

vetor[cont]=math.random * 60 + 20 );

}}

Eu faria assim…

Kassiane_Pretti

Só um detalhe… onde entra a questão de instância na questão, pois para abordá-la temos que ter uma classe pronta assim podemos “instânciar” um objeto dessa classe.
Mas se a questão era para implementar a classe ai seria muito simples e depois disso vc poderia instânciar um objeto dela…

Explique melhor essa questão…

=)

G

Concordo plenamente,

:slight_smile:

mas ajudo quando possível.

blackfalcon

Sera que seria instanciar a classe Random? Acho que essa classe nem precisa instanciar ne? rsrs

Abraços

Kassiane_Pretti

Não precisa não… é só pegar e usuar:

Math.randon()

ViniGodoy

KassiPretti:
Não precisa não… é só pegar e usuar:

Math.random()

O math.random() tem um problema sério. Pense um pouco, qual é a chance de dar 10 nesse sorteio:

int numero = (int)(Math.random() * 10);

Observe que a única forma de você obter um 10 é se o resultado do random for exatamente 1. Qualquer outro número será truncado. Portanto, a chance do 10 sair é ridiculamente menor do que a dos outros números.

O 0, por exemplo, poderá ser obtido se o random() retornar 0.01, 0.02, 0.03…

Isso gera um problema sério. Não temos uma distribuição estatística adequada entre os números gerados pelo Math.random().

O ideal é usar a classe Random. Ela possui o método nextInt() que gera um número entre 0 até o número informado-1. No caso, a mesma distribuição poderia ser feita assim:

Random random = new Random(); int numero = random.nextInt(11);

Ainda evita o cast inconveniente. No caso do método do colega… era possível usar ArrayList. Ou tinha que ser com arrays primitivos mesmo?

Kassiane_Pretti

Então quando eu uso um objeto ad classe randon é mais provável dar o numero maximo… não entendi o pq disso =\

ViniGodoy

A lição básica é… se for gerar números inteiros, use a classe Random() ao invés do Math.random().

Se eu não me engano, nas versões atuais do Java esse problema não ocorre mais. O contrato atual da Math.random() gera um número < 10. Logo, para gerar algo entre 0 e 10 vc teria que fazer:

int num = (int)Math.random() * 11;
Kassiane_Pretti

[quote=ViniGodoy]Logo, para gerar algo entre 0 e 10 vc teria que fazer:

int num = (int)Math.random() * 11;

Mas sempre quando eu preciso gerar numero aleatórios com o random eu faço assim, eu coloco N+1.

alucardeck

na verdade… tem sim como fazer usando o Math.random ()…
até pq eu uso!

ker um numero de 0 a 5?

int numero =   (int)Math.floor ( Math.random()*6 );

simples…

Math.random gera um numero aleatorio de 0,000000 até 0,999999

  • 6… fica
    de 0,00000 até 5,99999
    arredonda pra baixo… com Math.floor…
    e temos de 0 a 5… com chances iguais
ViniGodoy

Sim, eu gosto de ressaltar porque é a dica dada pelo Joshua Bloch, no Effective Java, quando ele diz:
“Know and use the libraries”.

Se existe um método, na classe Random, que foi especificamente pensado para dar resultados em um intervalo de inteiros, não use um método que te retorna doubles.

Com o Math.random() seu descuido pode gerar uma distribuição menos uniforme e pior do que a classe Random gerará. Use o método mais apropriado. É mais fácil e indolor… :slight_smile:

blackfalcon

ViniGodoy:
Sim, eu gosto de ressaltar porque é a dica dada pelo Joshua Bloch, no Effective Java, quando ele diz:
“Know and use the libraries”.

Se existe um método, na classe Random, que foi especificamente pensado para dar resultados em um intervalo de inteiros, não use um método que te retorna doubles.

Com o Math.random() seu descuido pode gerar uma distribuição menos uniforme e pior do que a classe Random gerará. Use o método mais apropriado. É mais fácil e indolor… :)

Penso igual. Nao trara tanto problemas agora e mais futuramente…

KassiPretti:
Não precisa não… é só pegar e usuar:

Math.randon()

Eu perguntei porque no livro do Deitel tem um uso dessa classe… E se nao me engano tinha que instanciar essa classe…

Abraços

ViniGodoy

Sim, a classe Random tem que ser instanciada.

A verdade é que os números aleatórios não são realmente aleatórios. Eles são a implementação de uma função que tem um comportamento que parece muito uma distribuição aleatória (por isso chamada de pseudo-aleatória).

Os números gerados pela função variam de acordo com uma semente inicial, que pode ser passada no construtor de um Random. Dois randoms com mesma semente irão gerar a mesma sequência de números.

Se você não especificar uma semente, o Random usará System.currentTimeMillis().

No caso da classe Math, não há necessidade de instanciar um Random. Isso porque o Random é um dos atributos estáticos da classe Math, que é inicializado assim que o método random() é chamado pela primeira vez (lazy-loading).

Criado 20 de junho de 2008
Ultima resposta 21 de jun. de 2008
Respostas 15
Participantes 8