ecco il metodo espressioneInfissa:
spero che adesso mi possiate aiutare..codice://Class per definire un'espressione Infissa import java.io.*; class espressioneInfissa implements Serializable { private String espressione; private Pila Formula; private Pila Operatori; private Pila Operandi; //------------------------------------------------ //Costruttore dell'espressione public espressioneInfissa(String _espressione) { espressione = _espressione; Formula = new Pila(); Operatori = new Pila(); Operandi = new Pila(); } //------------------------------------------------ //Metodo che restituisce la Stringa che costituisce l'espressione public String getEspressione() { return espressione; } //Metodo che restituisce il risultato dell'espressione, questo richiama il metodo tokenizza e il metodo svolgi operazione public int risultato() { tokenizza(); while(!Formula.isEmpty()) { String tokenCorrente = (String)(Formula.pop());//il token corrente è il segmento corrente dell'espressione if (tokenCorrente.equals("+") || tokenCorrente.equals("*") || tokenCorrente.equals("-") || tokenCorrente.equals("/")) // se il token è un operatore Operatori.push(tokenCorrente);//inserisci il token nella pila degli operatori else//altrimenti if (tokenCorrente.equals( ")" )) // se il token è la parentesi chiusa devo fare una operazione aritmetica svolgiOperazione();//e richiamo il metodo svolgiOperazione else // altrimenti il token è un operando Operandi.push(tokenCorrente);//e lo aggiungo nella pila degli operandi /* System.out.println("TRACCIA"); System.out.println("formula"+Formula); System.out.println("operatori"+Operatori); System.out.println("operandi"+Operandi); */ } int risultato=Integer.parseInt((String)(Operandi.pop())); if (Operandi.isEmpty())//se nella pila degli operandi non ci sono più operandi return risultato;//restituisce il risultato else { System.out.println("espressione non ben formata"); return -1; } } //Questo metodo viene richiamato dal metodo risultato, man mano che trova le ')', ed esegue //le operazioni tra gli operandi richiesti dall'operatore, se si effettua una divisione per zero //lancia l'eccezione aritmetica public void svolgiOperazione() { int op2=Integer.parseInt((String)(Operandi.pop())); int op1=Integer.parseInt((String)(Operandi.pop())); String operatore = (String)(Operatori.pop()); int risultato = 0; // vede che tipo di operazione deve eseguire in base all'operatore che viene trovato in cima alla pila if (operatore.equals("+")) risultato = op1+op2; else if(operatore.equals("*")) risultato = op1*op2; else if(operatore.equals("-")) risultato = op1-op2; else { try { risultato = op1/op2; } catch(ArithmeticException e)//se non puo' eseguire operazioni restituisce un messaggio di errore(eccezione) { System.out.println ("Si è verificato l'errore "+e); } } Operandi.push(""+risultato);//altrimenti prende il risultato e lo inserisce nella pila degli operandi } //Questo metodo suddivide la stringa dell'espressione in 3 pile, contenenti la formula dell'espressione //per intero escludendo le '(', una pila contiene gli operatori ed infine l'ultima contiene gli operandi public void tokenizza() { int cont = espressione.length()-1; char corrente; String temp = ""; while (cont>=0) { corrente = espressione.charAt(cont); if(corrente == ' ') cont--; else if(corrente == '(') { if(!temp.equals("")) { Formula.push(temp); temp=""; } cont--; } else if((corrente == ')') || (corrente == '+') || (corrente == '*') || (corrente == '-') || (corrente == '/')) { if(temp.equals("")) { temp += corrente; Formula.push(temp); temp = ""; cont--; } else { Formula.push(temp); temp = ""; temp += corrente; Formula.push(temp); temp = ""; // svuoto t cont--; } } else { temp = corrente + temp; cont --; } } } }
GRAZIE![]()

Rispondi quotando