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:
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]);
}
}
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.
Mi potreste aiutare a capire come fare? Vi ringrazio