Questo è sbagliato. E' innanzitutto un post-incremento, vuol dire che l'incremento avviene DOPO aver usato il valore. Ma avverrebbe comunque prima della assegnazione. Ma la assegnazione assegna lo stesso valore iniziale. Morale: qui l'effetto complessivo è che NON c'è alcun incremento!!
Non cercare cose "strane".
contatore++;
è sufficiente. Se proprio non volessi usare ++, allora anche
contatore = contatore + 1;
è (ovviamente) corretto.
Qui potresti partire con i = 1 (nulla di male comunque). E nel if si potrebbero togliere delle parentesi che sono tecnicamente superflue.
Non ho letto tutto tutto il codice.