Ciao elias90 e benvenuto nel mondo java.
L'errore sta nel fatto che dopo che trasformi la stringa in UpperCase non la trasformi più in lowerCase quindi la stringa rimane sempre maiuscola.
codice:
if(contatore%2==0){
            
                     stringa = stringa.toUpperCase();
                     System.out.println("la stringa è " +stringa);
             }else{
                     //Quando entra nell'else devi di nuovo trasformare la stringa
                     stringa = stringa.toLowerCase();
                     System.out.println("la stringa è " +stringa);
                }
Un'altra soluzione sarebbe, sfruttando l'immutabilità delle stringhe :
codice:
if(contatore%2==0){
            
                     System.out.println("la stringa è " +stringa.toUpperCase());
             }else{
                     //Quando entra nell'else devi di nuovo trasformare la stringa
                     
                     System.out.println("la stringa è " +stringa.toLowerCase());
                }