Ir ao conteúdo
  • Cadastre-se

Como seguir as boas práticas e usar ARRAY(vetores) para deixar o código mais curto?


Posts recomendados

No livro do Deitel tem um código interessante, onde ele simula um lançamento de um dado 6 mil vezes, e lista a frequência com que as faces se repetiram. Exemplo: Face1 958 vezes, face2 844 vezes, etc. Tudo isso de forma randômica. Compilei o código, e o adaptei pra mega sena. Ao invés de testar as seis faces de um dado, testei os 60 números da loteria, usando o mesmo princípio.
Como sou iniciante em Java, simplesmente repeti o código, implementando mais 54 variáveis, o que deixou o troço funcional, porém muito trabalhoso. Gostaria de saber, de acordo com as boas práticas da programação, como poderia fazer isso utilizando array, ou algo do gênero. Segue o código pra que dêem uma olhada.

import java.util.Random;
public class RollDie
{
public static void main(String[] args)
{
Random randomNumbers = new Random(); // gerador de número aleatório
int frequency1 = 0; // mantém a contagem de 1s lançados
int frequency2 = 0; // contagem de 2s lançados
int frequency3 = 0; // contagem de 3s lançados
int frequency4 = 0; // contagem de 4s lançados
int frequency5 = 0; // contagem de 5s lançados
int frequency6 = 0; // contagem de 6s lançados
int face; // armazena o valor lançado mais recentemente
// soma 6.000 lançamentos de um dado
for (int roll = 1; roll <+ 6000; roll++)
{
face = 1 + randomNumbers.nextInt(6); // número entre 1 a 6
// define o valor de lançamento de 1 a 6 e incrementa o contador apropriado
switch (face)
{
case 1:
++frequency1; // incrementa o contador de 1s
break;
case 2:
++frequency2; // incr. contador 2s
break;
case 3:
++frequency3; // incr. contador 3s
break;
case 4:
++frequency4;
break;
case 5:
++frequency5;
break;
case 6:
++frequency6;
break;// opcional ao final do switch
} // fim do switch
42,3-24 20%


No meu código eu fiquei com 60 frequency (frequency1...frequency60),e no switch tive 60 case (case 1... case 60) e gostaria de saber como enxugar esse código com um array, ou outro recurso, principalmente na questão de listar as entradas também.

Link para o comentário
Compartilhar em outros sites

Acredito que no próprio livro tenha a revisão de código para uso de arrays.

 

De forma simples:

- jogue fora todos seus frequencyX e crie um array de ints (int frequency[60])

- jogue fora todo o switch e faça a alteração diretamente no array (frequency[face]++)

 

* Cuidado com os índices, um array de 60 posições possui índices de 0 a 59.

Link para o comentário
Compartilhar em outros sites

Verdade Cweiler, foi precipitação de principiante, desculpa por isso. Na página 226 do livro tem a solução do meu problema, usando array. Segue o código pra quem precisar. Já implementei aqui com outras variáveis e deu tudo certo.

import java.util.Random;
public class DadoArray
{
public static void main (String[] args)
{
Random randomNumbers = new Random(); // gerador de nr. aleatór.
int [] frequency = new int [7]; // array e cont. de frequência
// lança os dados 6000 X; utiliza vl do dado como índice de freq
for (int roll = 1; roll <= 6000; roll++)
++frequency[1 + randomNumbers.nextInt(6)];
System.out.printf("%s%15s\n", "Lado", "Frequência");
//Gera saída do valor de cada elemento do array
for (int face = 1; face < frequency.length; face++)
System.out.printf("%4d%10d\n", face, frequency[face]);
} // fim de main
} // fim de classe

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...