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