Mmm ho l'impressione , anzi la certezza , che il ciclo "do-while" sia un loop infinito , infatti non vedo al suo interno alcuna istruzione che possa modificare lo stato di "fermo"..ad ogni incremento di "i" devi fare un qualche controllo ed eventualmente richiamare una funzione che setti a true "ferma" (in modo che !ferma sia false) così da uscire dal loop..
ci dovrebbe essere un qualcosa del genere:
codice:do { i++; unQualcheMetodo (i); }while (!ferma); //dove unQualcheMetodo sarà del tipo void unQualcheMetodo (int i) { ... if (determinataCondizioneInRelazioneAI) ferma = true; ... }![]()