Mostrar quantas vezes o numero saiu na matriz ?

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");	
}

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:

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

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

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]);
}

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*/
1 curtida

valew cara funcionou o codigo!:smile:

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?

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

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

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

Obrigado jovem…vou dar uma estudada aqui.