Mostrar quantas vezes o numero saiu na matriz ?

11 respostas
A

To fazendo um exercício da mega sena que precisava gerar uma matriz [3000][6] com 3000 mil linhas e seis colunas com números aleatórios e dai ordenei ela em ordem crescente e coloquei um vetor para mostrar o numero de linhas. Agora preciso mostrar quantas vezes cada numero saiu na matriz pro exemplo: 10 saiu 500 vezes, 58 saiu 200 vezes em ordem crescente, mostrar as 20 duplas que mais saíram tipo 12 e 2 saíram 100 vezes; e os 20 números que mais saíram em ordem crescente.
Alguém pode ajudar? não to conseguindo, ja tentei de muitas formas e até agora nada!
Segue o código abaixo:

import java.util.Random;


public class Teste {


public static void main(String[] args) {

    
 int m [][] = new int [3000][6];
 int v[] = new int[65];
 int num=0;
  
   
  
   
   Random  gerador = new Random ();
     
   for (int i=0; i < 3000  ; i++)
   {
       for(int j = 1 ; j <= 60 ; j++)
           v[j] = 0;
       
       int j = 0;
       
        while(j < 6)   
        {
            int aux = gerador.nextInt(60) + 1;

            if(v[aux] == 0){

                m[i][j++] = aux;
                v[aux] = 1;

            }
        }        
    }
   
   for(int k = 0 ; k < 3000 ; k++){
        
       for(int i = 0 ; i < 6 ; i++){

            for(int j = i ; j > 0 ; j--){

                if(m[k][j] < m[k][j - 1]){

                    int aux = m[k][j];
                        m[k][j] = m[k][j - 1];
                        m[k][j - 1] = aux;
                }
      
         
            }
             
    
        }
   }
         
                 
 
   
   
for (int i=0; i < 3000; i++)
   {
     
       System.out.print("Sorteio ["+(i+1)+"]:  "); 
       
       for (int j=0; j < 6; j++)
                                    
           System.out.printf("%d ", m[i][j]);     
           System.out.print("\n");
   }  


 //tentando contar os numeros da matriz

    for(int i=0; i<m.length; i++)
{
 int cont=0;
for(int j=0; j<m.length; j++)
	{
	if (m[i][0] == m[0][j])
	cont++;
	num = m[i][0];
	}
System.out.println(" repeticoes numero " + num + ": " + cont + " vezes");	
}

11 Respostas

peczenyj

Vamos la

A forma ideal de contar repeticoes é vc isar um Map numero -> numero onde a chave é o nunero e o valor é o nunero de repetições.

Mas se vc não pode/quer usar estruturas de dados mais adequadas vc pode improvisar.

Por exemplo se o range de dados é conhecido e pequeno ( 0 a 9 por exemplo ) vc pode usar um array com o número sendo o indice e o valor sendo a quantidade.

/* agora compila */
int qtdes[] = new int[10];
int values[] = new int[]{1,1,1,2,2,9};

for(int i : values){ qtdes[i]++; }
for(int i = 0; i < qtdes.length; i++){ 
  if(qtdes[i] > 0) System.out.println(i + " aparece " + qtdes[i]);
}

Agora se ao inves de 9 vc tiver todos os inteiros positivos ( Integer.MAX_INT ) ainda assim da pra fazer.

Porém para tipos numéricos maiores vc pode nao ter memória suficiente. Se bem que hoje em dia quem nao tem uns gigas de ram? Testa ate ter um OutOfMemory :slight_smile:

A

Ainda não compilou…o que significa OutofdMemory? pode dar um exemplo melhor por favor!

peczenyj

eu quis dizer out of memory

como quando vc tenta criar um array de tamanho infinito ( ou grande demais)

eu corrigi uns errinhos e eis a saida do meu exemplo:

1 aparece 3
2 aparece 2
9 aparece 1

A

Vou tentar, eu mudei algumas coisas no seu codigo mas não funcionou, poderia ajudar? para ele contar quantas vezes o numero aparece nessa matriz, de numeros aleatorios. Sendo que os numeros da matriz só podem ir até 65, a matriz possui 3000 mil linhas e 6 colunas.

//tentando contar os numeros da matriz

int qtdes[] = new int[65];
int values[] = new int[]{1,1,1,2,2,9};

for(int i : values){ qtdes[i]++; }
 for(int i = 0; i < qtdes.length;){
if(qtdes[i] > 0)

System.out.println(i + " aparece " + qtdes[i]);

}
peczenyj

vejamos

int matriz[3000][6] = ...
for(int i = 0; i< 3000; i++){
  for(int j = 0; j< 3000; i++){
    int numero = matriz[i][j]; /* certo ?*/
    qtdes[ numero ] ++;
  }
}

/* faz um for em todos os elementos de qtdes e mostra na tela ue*/
A

valew cara funcionou o codigo!:smile:

A

Preciso continuar esse código, com a mesma matriz[3000][6] agora preciso mostrar os dezessete números que mais saíram no sorteio; e as duplas que mais saíram.

  1. Os dezessete números que mais saíram é…
  2. As dezessete duplas que mais saíram por exemplo “o 2 e 49 saíram 1000 vezes”…alguém ainda pode ajudar?
peczenyj

para responder precisamos saber: cara vc manja de ordenação?

pq vc quer basicamente ordenar uma coleção de dados sob um criterio.

existe uma forma facil de fazer isso usando o Collections.sort – vc poderia criar uma classe Ocorrencia que contem valor e quantidade ( de vezes que brotou ). faz essa classe implementar Comparable e estuda como isso pode ser usado pra ordenar pela quantidade. ai vc ordena e pega os 17 primeiros elementos.

agora as duplas… mano… ta ai um bom problema. resolve o primeiro que isso talvez lhe de subsidio para o segundo e ai vc cria uma outra pergunta especifica

A

Cara eu não manjo…eu sou iniciante em java…to me matando pra fazer esse exercício…to ordenando tudo pelo for

peczenyj

https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html

pra fazer isso BEM vc vai ter que usar alguma estrutura de dados e algum jeito de ordenar.

ou mete um array de objetos que armazenem o valor e a quantidade de ocorrencias e use este cara para ordenar:

https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#sort(java.lang.Object[])

ou seja vc cria o que te falei e implementa Comparable.

https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html

A

Obrigado jovem…vou dar uma estudada aqui.

Criado 22 de outubro de 2016
Ultima resposta 1 de nov. de 2016
Respostas 11
Participantes 2