Ciao ragazzi, è la prima volta che scrivo qui sul forum, ed ho bisogno del vostro aiuto.
Allora ho da risolvere un problema d'esame, del quale sono riuscito a risolverne una parte, ma ora ho un altro problema.
La traccia è questa:
Questo è il codice svolto fino ad ora:
Ho svolto il metodo del comprimiArray, ma ora non riesco a risolvere il metodo del comprimiMatrice, in quanto mi legge solo la prima riga e si ferma, tra l'altro mi dà anche qualche eccezione.codice:public class GestioneImmagini { public static int[] comprimiMatrice(boolean[][]M){ int[] v= new int[2]; int[] v2=new int[M.length*M[0].length]; v[0]=M.length; v[1]=M[0].length; int bianchi=0; int neri=0; int i=0; int l=0; boolean cambiato=false; while(i < M.length){ if(i > 0 && M[i] != M[i-1]){ System.out.println("i= "+ i + "rilevato cambiamento"); if(M[i] == true){ //neri System.out.println("Gli ultimi elementi erano neri"); v2[l++]=neri; neri=0; } else //bianchi { System.out.println("Gli ultimi elementi erano bianchi"); v2[l++]=bianchi*-1; bianchi=0; } } if(M[i] == false){ System.out.println("L'elemento corrente è un bianco (i= "+i+")"); bianchi++; } else{ System.out.println("L'elemento corrente è un nero (i= "+i+")"); neri++; } j++; if(i >= M[0].length) //elemento cambiato rispetto al precedente { System.out.println("i = "+ i +" rilevato cambiamento"); if(M[i-1] == true) //neri { System.out.println("Gli ultimi elementi erano neri"); v2[l++]=neri; } else { System.out.println("Gli ultimi elementi erano bianchi"); v2[l++]=bianchi*-1; } } } return v2; } public static int[] comprimiArray(boolean[] B1){ int[] V1=new int[B1.length]; int bianchi=0; int neri=0; int i = 0; int l = 0; boolean cambiato = false; while(i < B1.length) { if(i > 0 && B1[i] != B1[i-1]) // se l'elemento è cambiato rispetto al precedente { System.out.println("i = " + i + " rilevato cambiamento"); if(B1[i-1] == true) //neri { System.out.println("Gli ultimi elementi erano neri"); V1[l++] = neri; neri=0; } else //bianchi { System.out.println("Gli ultimi elementi erano bianchi"); V1[l++] = bianchi * -1; bianchi=0; } } if(B1[i] == false) { System.out.println("L'elemento corrente e' un bianco (i = " + i + ")"); bianchi++; } else { System.out.println("L'elemento corrente e' un nero (i = " + i + ")"); neri++; } i++; if(i == B1.length) // se l'elemento è cambiato rispetto al precedente { System.out.println("i = " + i + " rilevato cambiamento"); if(B1[i-1] == true) //neri { System.out.println("Gli ultimi elementi erano neri"); V1[l++] = neri; } else //bianchi { System.out.println("Gli ultimi elementi erano bianchi"); V1[l++] = bianchi * -1; } } } return V1; } public static void main (String[] args){ int[] V1; int[] v2; boolean[][] M={{false,false,true,false,false}, {false,true,true,true,false}, {true,true,true,true,true}, {false,true,true,true,false}, {false,false,true,false,false}}; boolean[] B1={false,false,true,false,false}; V1=comprimiArray(B1); for(int i=0;i<V1.length;i++) System.out.println(V1[i]); v2=comprimiMatrice(M); for(int i=0;i<v2.length;i++) System.out.println(v2[i]); } }
Mi potreste aiutare a capire come fare? Vi ringrazio


Rispondi quotando