Dúvida. Calcular Moda de uma Matriz

Olá, estou com uma duvida de logica em relação a um problema de como calcular a Moda de uma matriz.

Dado uma Matriz[X][Y]:

1- Mostre os numeros que se repetem e a quantidade de repetições de cada um e qual foi o item que mais se repetiu (MODA).

Dúvida: Tenho que criar um array para armazenar o item que se repete e outro para armazenar a qtdade de vezes que ele se repete no meu teste condicional eh exibido o numero de vezes que ele se repete em todo array Ex: contem 3 valores 5 na tabela então deveria ser exibido 5 5 5, mas meu teste condicional 555 555 555 pois ele compara o numero 5 a cada vez que aparece em todo array novamente. Tentei outros criterios mas apareciam outros erros.

Código:

[code]
public class Moda {

//FUNCAO CALCULA MODA MATRIZ
public static void modaMatriz(int matriz[][]){
	
  for(int i=0;i<matriz.length;i++){
       System.out.print("\n");	  		
         for(int j=0;j<matriz[i].length;j++){
		     for(int m=0;m<matriz.length;m++){
		   	     for(int n = 0;n<matriz[m].length;n++){
				    
			    	  if((matriz[i][j]==matriz[m][n])){					         
			             	 System.out.print(" "+matriz[i][j]);
			          }
			        }
  	             }
		      }
           }
}

public static void main(String[] args) {

  int Matriz[][]={{1,5,9,65,4,8},{9,5,4,7,9,90},{6,4,6,8,9,0},{7,5,4,3,5,7},{89,9,87,0,4,5}};

 
 Moda.modaMatriz(Matriz);
     
}

}[/code]

Vc pode usar um Map para armazenar os contadores.

[code]import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

/**
*

  • @author David
    */
    public class TesteModa {

    public static void main(String[] args) {

     int moda = obterModa( new int[][] {
                 { 1, 5, 9, 65, 4, 8 },
                 { 9, 5, 4, 7, 9, 90 },
                 { 6, 4, 6, 8, 9, 0 },
                 { 7, 5, 4, 3, 5, 7 },
                 { 89, 9, 87, 0, 4, 5 }
             }); 
     
     System.out.println( "Moda: " + moda );
    

    }

    public static int obterModa( int[][] mat ) {

     // usa uma mapa para servir como contador
     // a chave do item será o número, enquanto o valor é a quantidade de repetições
     Map<Integer, Integer> cont = new HashMap<Integer, Integer>();
    
     // itera pela matriz
     for ( int[] coluna : mat ) {
         for ( int e : coluna ) {
             
             // se existe a chave no mapa (baseada no número)
             if ( cont.containsKey( e ) ) {
                 // incrementa o valor existente
                 cont.put( e, cont.get( e ) + 1 );
             } else {
                 // caso contrário, insere 1
                 cont.put( e, 1 );
             }
    
         }
     }
    
     int maior = 0;
     int moda = 0;
    
     // itera pelo mapa de contadores
     for ( Entry<Integer, Integer> e : cont.entrySet() ) {
    
         // verifica se o valor atual é o maior
         if ( e.getValue() > maior ) {
             
             // se for, obtém o valor (para ser comparado com o próximo)
             maior = e.getValue();
             
             // pega a chave (que é o número mais contado até o momento)
             moda = e.getKey();
             
         }
    
         // exibe
         System.out.print( e.getKey() + " " );
    
         for ( int i = 0; i < e.getValue(); i++ ) {
             System.out.print( " " + e.getKey() );
         }
    
         System.out.println();
         
     }
    
     // retorna a moda
     // se tiver números com a mesma quantidade de repetições, retorna
     // o primeiro encontrado.
     return moda;
    

    }

}[/code]

Não sou muito de resolver tudo p/ quem pergunta, mas hoje fugi à regra :smiley:

[]´s

Você sabe o intervalo máximo dos números que podem ir dentro da matriz? Se não souber, você terá que usar um Map<Integer, Integer> e não um array.

O que o Vini falou foi o que eu fiz, ou seja, tratei a possibilidade da inserção de qualquer valor. Caso você saiba o intervalo, você pode usar um array que tem como tamanho a quantidade do intervalo. Ai vc incrementa a posição correspondente ao valor que foi encontrado.

[]´s

O que o Vini falou foi o que eu fiz, ou seja, tratei a possibilidade da inserção de qualquer valor. Caso você saiba o intervalo, você pode usar um array que tem como tamanho a quantidade do intervalo. Ai vc incrementa a posição correspondente ao valor que foi encontrado.

[]´s[/quote]

Muito Obrigado pela ajuda. Agora eu vou dar uma pesquisida em HashMap e ver como funciona. :smiley: