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 post
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 post
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 post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

Aprenda a ler resistores e capacitores

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!