Alguém sabe a lógica...?

alguém sabe a lógica dessa instrução

  for ( int roll = 1; roll <= 6000; roll++ ) 
         ++frequency[ 1 + randomNumbers.nextInt( 6 ) ];

o programa de onde tirei isso

// Rola um dado de seis lados 6000 vezes.
import java.util.Random;

public class RollDie 
{
   public static void main( String args[] )
   {
      Random randomNumbers = new Random(); // gerador de número aleatório
      int frequency[] = new int[ 7 ]; // array de contadores de freqüência

      // lança o dados 6000 vezes; utiliza o valor do dado como índice de freqüência
      for ( int roll = 1; roll <= 6000; roll++ ) 
         ++frequency[ 1 + randomNumbers.nextInt( 6 ) ];// porque naum repete 6 mil vezes?

      System.out.printf( "%s%10s\n", "Face", "Frequency" );
   
      // 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 da classe RollDie

O for, percorre as 6000 vezes sim.

O Programa mostra quais os números aleatórios entre 1 e 6 se repetem em maior quantidade, durante as 6000 vezes em que o for é percorrido.

Agora, estou tentando descobrir como o vetor consegue armazenar isso!!
Tô de cara com o programinha!

Para cada iteração do for (que roda 6000 vezes), um número aleatório de 1 a 6 é gerado.
Caso o número seja 1, o valor da posição 1 do vetor é incrementado. Se for 2, a posição 2…

  • O vetor não tem motivo pra estourar, já que só usa suas 6 posições (ele tem 7, mas a zero não é usada).
  • Sim, cada posição do vetor guarda o número de vezes que aquele número saiu no dado.
  • Ele repete 6000 vezes.
  • Pra incrementar o valor da posição do vetor.

Dei mais uma analisada no código aqui.

O seguinte trecho: 1 + randomNumbers.nextInt( 6 )
Vai retornar um valor maior ou igual a 0 e menor que 6.

Esse 1 que soma com o resultado, é porque o cara quer o número entre 1 e 6. Portanto, assim ele cancela o 0.

De acordo com o que entendi, o vetor frequency trabalha da seguinte forma:

++frequency[ 1 + randomNumbers.nextInt( 6 ) ];

Não sei se vc vai conseguir entender o meu raciocínio…

O valor dentro das chaves, vai variar entre 1 e 6. Assim, sempre que um número se repete o contador de frequencia adiciona 1 ao contador.

Assim ele consegue armazenar a quantidade de vezes que determinado número apareceu…

Eu nunca tinha visto um código parecido com esse. Dei uma lida na documentação, etc… Inseri umas mudanças no código, só pra facilitar o entendimento e descobrir como funcionava…se quiser dar uma olhada, roda aí…

[code]// Rola um dado de seis lados 6000 vezes.
import java.util.Random;

public class RollDie
{
public static void main( String args[] )
{
Random randomNumbers = new Random(); // gerador de número aleatório
int frequency[] = new int[ 7 ]; // array de contadores de freqüência
int a = 0;
// lança o dados 6000 vezes; utiliza o valor do dado como índice de freqüência
for ( int roll = 1; roll <= 17; roll++ )
{
a=0;
a= randomNumbers.nextInt( 6 );
System.out.println("Valor randomico de a = “+a +”\nNumero de vezes q Apareceu = ");
// ++frequency[ 1 + a]

      // ++frequency[ 1 + randomNumbers.nextInt( 6 ) ];// porque naum repete 6 mil vezes? 
      System.out.println(++frequency[ 1 + a ]);
  }

System.out.printf( “%s%10s\n”, “Face”, “Frequency” );

  // 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 da classe RollDie
[/code]

Flws!

esse progs são da faculdade a qual eu estudo tem piores mais nem sei como começar obrigado pela ajuda galera ai veem piores expero contar com vcs…!
como sempre entedi a lógica graças a vcs…!

Isso é um exemplo do livro do Deitel.

é mesmo cara meu professor pega esses progs e pede pra gente fazer depois , lá a gente usa esse livro java como programar mesmo com o livro fica dificil enteder como tudo isso funciona…

não sei se vs vão ficar de cara com esta resposta, mas o problema de vocês não é com o Java.
vocês precisam estudar lógica de programação …

é sério, o problema não é java básico, e sim lógica básica …

para tentar solucionar isto, tentem escrever o programa em portugues …
exatamente isto que eu escrevi, escrevam o programa que vocês estão tentando entender em portugues, vai facilitar bastante e vocês vão aprender um pouco de lógica :smiley: