Java: estrazione elementi ripetuti p volte in una matrice

Tema 99

Scrivere un metodo creaArrayConElementiRipetutiEsattamentePvolte che riceve in ingresso una matrice M e un intero p e restituisce un array di interi contenente gli elementi presenti esattamente p volte in M.

Ad esempio, sia M la matrice così costituita

3 18 15 7 2
1 9 11 4 6
7 2 6 3 5
5 1 25 2 1
3 2 33 4 4

allora creaArrayConElementiRipetutiEsattamentePvolte (M,2) darà

7 6 5

 public class tema99{ // ci serviamo di un metodo di supporto per calcolare se un elemento è presente // più volte nella matrice public static int presenzaInMatrice (int k, int[][] M){ // inzializziamo un contatore che verrà incrementato ogni volta che un elemento // si ripete int contaPresenze = 0; for (int i = 0; i < M.length; i++){ for (int j = 0; j < M[0].length; j++){ if (M[i][j] == k) contaPresenze++;} } return contaPresenze; } public static int[] creaArrayConElementiRipetutiEsattamentePvolte (int[][] M, int p){ // creiamo un array temporaneo con dimensione massima data dal prodotto delle // due dimensioni // di M, nel caso p fosse uguale a 1 e gli elementi di M fossero tutti distinti int[] arrayTemporaneo = new int[M.length * M[0].length]; // prepariamo un indice per la scansione dell’array finale int indiceArray = 0; // cominciamo a scorrere gli elementi della matrice for (int i = 0; i < M.length; i++){ for (int j = 0; j < M.length; j++){ // verifichiamo con il metodo precedente se un elemento è presente esattamente p // volte if (presenzaInMatrice (M[i][j], M) == p){ // con una variabile boolean  controlliamo che lo stesso elemento non venga // inserito più volte nell’array boolean giàInserito = false; // scorriamo gli elementi dell’array for (int k = 0; k < M.length; k++){ // verifichiamo che nell’array non ci sia già il valore che in quel momento è al // vaglio dei controlli if (arrayTemporaneo[k] == M[i][j]) giàInserito = true;} // nel caso in cui nell’array non ci fosse quell’elemento if (!giàInserito){ // allora lo posizioniamo nella prima cella vuota dell’array arrayTemporaneo[indiceArray] = M[i][j]; // incrementiamo progressivamente l’indice di scansione dell’array indiceArray++;} } } } // creiamo l’array finale che ovviamente avrà dimensione pari al valore // raggiunto dall’indice di scansione int[] arrayFinale = new int[indiceArray]; for (int i = 0; i < arrayFinale.length; i++){ // trasferiamo gli elementi dell’array temporaneo nell’array finale con la // giusta dimensione arrayFinale[i] = arrayTemporaneo[i];} return arrayFinale; }  public static void visualizzaArray (int[] V) { for (int i = 0; i < V.length; i++) System.out.print(V[i] + " "); System.out.println(); }  /* Applicazione di prova */  public static void main(String[] args){ int[][] M = {{3,18,15,7,2}, {1,9,11,4,6}, {7,2,6,3,5}, {5,1,25,2,1}, {3,2,33,4,4}}; int[]V = creaArrayConElementiRipetutiEsattamentePvolte (M,2); visualizzaArray (V); } }     

Commenti

commenti