Salve ragazzi, sono ore che sbatto la testa su questo esercizio...senza aver trovato alcuna soluzione

Se qualcuno potesse indirizzarmi...ve ne sarei infinitamente grato!

Ecco il testo dell'esercizio:

Scrivere un metodo che, dati un array bidimensionale a di interi ed un intero
k, restituisce un array monodimensionale b di booleani tale che l'elemento b[i] di b vale true
se nella riga a[i] di a esiste almeno un intero maggiore di k, altrimenti b[i] vale false. Ad
esempio, dati a = {{3,5,7,9,},{4,-1},{-9,21,5}} e k = 6, il metodo restituisce l'array b
= {true,false,true}

E l'esercizio svolto da me...

codice:
public class array1_sett_06{
	public static void main (String []args)
		int [] [] a = {{3,5,7,9,},{4,-1},{-9,21,5}};
		int k;
		int c;
		boolean [] funzione;
		c=a.length;
		k=6;
		funzione = array_test (a,k,c);
		System.out.println (funzione);
		}

		
		public static boolean [] array_test  (int [] [] a, int k,int c){
			int i;
	                int j;
			i=0;
			boolean [] b= new boolean [c];
			while(i<a.length){
				for(j=0; j<a[i].length; j++){
					if (k<a[i][j]){
						b[i] =true;
						i++;
						}
						}
						b[i]= false;
						i++;
					}
					
					return b ;
					}
					}
...il quale mi restituisce il seguente errore in riferimento all'array...
codice:
Exception in thread "main" java.lang.ArrayIndexOutBoundsException: 3
  at array1_sett_06.array_test(array1_sett_06:java:20)
  at array1_sett_06.main(array1_sett_06:java:9)
Un grazie in anticipo a tutti!