Salve...sto provando a realizzare un progettino affidatomi dal mio prof all'università. Si tratta di realizzare un programmino che data un espressione aritmetica da input mi dia il risultato in output. Ecco, come consigliatomi dal prof, ho usato 2 stack (lo stack non è quello standard di java, ma uno con funzioni simili realizzato in aula) uno per gli operandi e uno per gli operatori che sono + - * / % ^ . Per garantire la priorità degli operatori mi sono creato un metodo compare a parte.
Ora il mio problema si riscontra quando vado ad inserire le parentesi tonde: cioè il mio programmino deve essere in grado di risolvere una cosa del tipo (8-2)*3 oppure (8-3)+(3*2) ect.
Per far questo ho fatto in modo che quando mi trova una parentesi tonda aperta mi usa ricorsivamente il metodo valuta (il metodo principale) quando invece trova una parentesi tonda chiusa mi ritorna operandi.top() (operandi è lo stack e top() è un metodo che ritorna il valore in vetta allo stack senza però eliminarlo dallo stack stesso).
Il problema sta qui: (8-3)+3 mi da 8 correttamente, mentre 3+(8-3) mi da 5 cioè mi da il risultato all'interno della parentesi dimenticandosi di quello che precede.
Secondo voi dove sbaglio? So che senza il codice davanti è difficile rispondermi ma preferirei non pubblicarlo...in caso vi manderò il codice privatamente.
Grazie in anticipo.

Rispondi quotando