Ciao ragazzi con questo post non vi chiedo di risolvermi l'esercizio (anche perchè è già risolto) ma vorrei chiedervi dei chiarimenti sul suo funzionamento

  • class E1{

    /** Realizzare in modo iterativo la funzione f qui sotto riportata che riconosce se l'array in ingresso
    * corrisponde ad una frase della grammatica {0}1{0}1{0}1{0}1. Si prediligono soluzioni che usano il

    * minor numero possibile di cicli for (o while).
    *
    * Come riferimento si consideri che l'esecuzione del test
    * (eseguita dal metodo main) deve riportare il risultato true.
    **/

    public static boolean f(int[] a){

    if (a.length==0 || a[a.length-1]!=1){

    return false;

    }

    int c=0;

    for (int i=0;i<a.length-1;i++){

    if (a[i]!=0 && a[i]!=1){

    return false;

    }

    if (a[i]==1){

    c++;

    }

    }

    System.out.println(arrayToString(a));
    return (c==3);
    }


    public static boolean test(){
    return f(new int[]{1,1,1,1}) &&
    f(new int[]{0,0,0,1,0,1,1,0,0,1}) &&
    f(new int[]{1,0,0,1,1,0,0,0,0,1}) &&
    f(new int[]{1,0,0,1,0,0,1,0,0,0,0,1}) &&

    !f(new int[]{}) &&
    !f(new int[]{1,1,1}) &&

    !f(new int[]{1,1}) &&

    !f(new int[]{1,0}) &&

    !f(new int[]{0,0,1,0,1,0,0,1}) &&
    !f(new int[]{0,1,0,1,1,0,0,1,1}) &&

    !f(new int[]{1,1,1,1,0}) &&

    !f(new int[]{0,0,1,0,0,1,0,1,0,0,0,1,0,0}) &&

    !f(new int[]{0,1,0,1,0,1,2,1}) &&

    !f(new int[]{0,1,0,1,3,1,0,1});
    }

    public static void main(String[] s){
    System.out.println(""+test());
    }

    static String arrayToString(int[] a){
    String s="";
    for (int i=0;i<a.length;i++) {
    s+=a[i]+";";
    }
    return s;
    }

    static boolean arrayEquals(int[] a,int[] b){
    if (a.length!=b.length) return false;
    for (int i=0;i<a.length;i++){
    if (a[i]!=b[i]) {
    return false;
    }
    }
    return true;
    }

    }

Il problema è che essendo ignorante (anche dopo aver letto 3-4 libri sull'argomento) non mi è chiaro cosa mi viene richiesto, cosa si intende per grammatica {0}1{0}1 ... e come fà a tornare true ?
Ciauz !!!