- boolean left = true deve essere dichiarato fuori dal for, come fai con "right": se no, non appena esci dal ciclo è come se non esistesse più (e non compilerebbe, visto che poi cerchi di utilizzarlo a fondo programma)
boolean left è il booleano che controlla se è vera la condizione del ciclo
for (int j=i-1;j<i;j++),il booleano right controlla il ciclo for(int i = 1; i < a.length- 1; i++) e alla fine il booleano risposta che precede il ciclo for(int i=0; i<a.length;i++) mi da la risposta totale..tutti e 3 i booleani precedono il ciclo che devono controllare...secondo me è corretto

è ridondante utilizzare un if-else se poi uno dei due rami non contiene codice... è sufficiente invertire la logica e usare solo if.
su questo hai ragione tu, ma per motivi didattici sono portato a scrivere il programma in questa maniera
Per rispondere alla tua ultima domanda: si parte da 1 perchè, se iniziassi da 0, alla prima iterazione l'elemento i - 1 sarebbe -1... e dunque non valido
Non so se ho capito bene quello che volevi dirmi...io ho fatto cosi

for(int i=1; i<a.length;i++){
boolean left =true;
for (int j=i-1;j<i;j++){

i vale1 quindi i-1 vale 0, dunque j parte da 0...



Grazie ancora per la tua cortesia


codice:
public static boolean m(int a[]){
//inserisco la prima condizione (per ogni 0<=j<i vale che se j è pari allora A[j]<A[i])
boolean risposta=true;
    for(int i=1; i<a.length;i++){
    boolean left =true;
         for (int j=i-1;j<i;j++){
         if(j%2==0&& a[j]<a[i]){
          }
             else{ left=false;}}

//seconda condizione un po diversa da quella proposta da Lomio(ditemi se va bene)
              boolean right=true;
              for(int i = 1; i < a.length- 1; i++) {
   if (a[i] == a[i-1] + a[i+1]) {}
      else { right=false;}}
   

//controllo finale
if(left||right){
}
else{
risposta=false;}
}
return risposta;}