
Originariamente inviata da
LeleFT
senza costringere a copincollare, compilare, eseguire e fare prove su prove. Aiutaci ad aiutarti.

Non pensavo vi togliesse più di 5 minuti di tempo copiare, incollare e fare delle prove...
Comunque: il programma non da il risultato esatto. O meglio, non sempre da il risultato esatto.
Il programma funziona con input del tipo "3^2*5-5", "1+1+1+1+1+1" e insomma cose così.. (non so che dirvi su quali input funziona, con alcuni si(la maggiorparte sono espressioni banalissime) e con altri input del tipo "4^2-5*8+3+4" già non funziona più, da un risultato errato (95).)
Cosa mi fa pensare che vi sia un errore... mmm vediamo... ho inserito dei System.out.println(operandi); ogni volta che viene modificato lo Stack operandi in modo da cercare di capire il perchè dia un risultato errato. Con "4^2-5*8+3+4" come input ho notato che non venivano applicate le giuste priorità agli operatori, ma in realtà non è proprio così, diciamo che a volte applica delle operazioni non desiderate. Di seguito vi riporto l'output :
codice:
[4] //aggiunge il primo numero allo stack operandi
[4, 2] //nel frattempo nello stack operatori viene aggiunto il segno "^" e successivamente viene aggiunto in cima allo stack operandi il secondo numero
[16] //prende il segno - , lo confronta con la cima di operatori (che è ^), capisce che non è prioritario e perciò esegue 4^2, mette il risultato nella cima di operandi e mette il segno - in cima a operatori
[16, 5] //legge il numero 5 e lo mette in cima allo stack operandi
[11] //legge il segno * , lo confronta con la cima di operatori (che è -) e non so per quale motivo, invece di mettere in cima allo stack il segno *, compie l'operazione 16-5 e mette il risultato in cima allo stack operandi! (cioè, non riconosce che * è prioritario rispetto a - , e non capisco il perchè
[11, 8] // da qui in poi riprende a ragionare e le operazioni (che però non dovrebbero essere queste) sono esatte
[88]
[88, 3]
[91]
[91, 4]
[95]
[95]
l'output che dovrebbe uscire è invece: (p.s. forse ho sbagliato qualche passaggio)
codice:
[4]
[4, 2]
[16]
[16, 5]
[16, 5, 8]
[16, 40]
[-24]
[-24, 3]
[-21]
[-21, 4]
[-17]
Non so cosa altro dire per farmi aiutare...