Ciao a tutti
Premetto che frequento la classe quarta di Informatica, qualcosa so ma siamo "leggermente" indietro con il programma
Stiamo trattando le Pile ma non abbiamo avuto molte informazioni al riguardo...
Nonostante questo, armato della voglia di imparare, mi sono andato a vedere le Java API ( come di solito faccio per le singole classi che non conosco ).
La classe Stack alla fine sono riuscito a farla, prendendo anche spunto da internet
Ma arriviamo al vero problema, il professore, senza spiegarci troppo, ci ha dato da fare questo esercizio che prevede, come da titolo, di costruire una applicazione in grado di risolvere delle espressioni mediante l'uso della Pila.
Il modo con cui viene inserita questa espressione ( da input ) prevede solo l'utilizzo di parentesi tonde e che ogni operatore abbia la stessa importanza.
Il problema e' che nonostante mi sia fatto un'idea di come risolvere il programma ad ogni idea corrispondevano mille miei dubbi che salivano...
Mi spiego meglio...Avevo pensato di creare qualcosa che prima divida l'espressione in tante parentesi tonde ( tipo se digitavo "(2+2)+(5-2)" dividevo in sotto stringhe "(2+2)" "+" "(5-2)" )
E anche qua non riesco bene a trovare un metodo che mi automatizzi questo passaggio...avevo pensato di combinare indexOf e substring ma ogni volta che riprovo riesco a farlo solo per 2 parentesi, se aggiungo la terza il programma si interrompe generando un errore.
codice:
        int iniziosegno=0,finesegno=0;        
        String espr="(3212-73)-(222+44)",primaparte="",secondaparte="",segno="";
        iniziosegno=espr.indexOf(')');
        finesegno=espr.indexOf('(',iniziosegno);
        segno=espr.substring(iniziosegno+1,finesegno);
        System.out.println("segno espressione: "+segno);
        primaparte=espr.substring(0,iniziosegno+1);
        System.out.println("Prima parte dell'espressione: "+primaparte);
        secondaparte=espr.substring(finesegno);
        System.out.println("Seconda parte dell'espressione: "+secondaparte);
Mi scuso per i nomi delle variabili ma ho cercato di rendervele piu chiare possibili, "iniziosegno" e "finesegno" mi servivano per trovare la posizione del segno che divideva le due parentesi.
Alla fine riuscivo a dividere l'espressione "(3212-73)-(222+44)" ma, come ho detto, se provavo a inserire un'altra parentesi il programma generava un errore.
La cosa che penso bisogni usare e' la funzione ricorsiva, pero' non ho nemmeno una idea su come procedere e tra le altre cose non l'abbiamo mai usata
Come se non bastasse non riesco nemmeno a dividere automaticamente i numeri, per esempio se inserisci "(22+2)" vorrei che automaticamente mi dividesse i numeri con 2 variabili per poi sommarle, stessa cosa se inserisco "(22+2+3)"
Quindi quello che chiedo "semplicemente" non e' il codice pronto, anche perche' altrimenti non imparerei mai, ma solamente i pareri su come poter procedere da persone che sicuramente ne sanno molto piu' di me..
Mi piacerebbe sapere voi come strutturereste il problema, come pensavate di poterlo risolvere
So che non bisogna fare tutto subito ma ci vuole uno studio sotto ed e' quello che ho tentato di fare ma senza apparente successo
Ho provato inizialmente senza l'uso della Pila ma il problema persiste
So di aver scritto un po' troppo forse ma ho cercato di spiegarvi piu' dettagliatamente possibile il mio problema, mi scuso per eventuali errori di grammatica
Nonostante tutto io continuo a provare, non si sa mai che mi venga qualche intuizione geniale
Attendo una vostra risposta!
Grazie mille in anticipo!

P.S. non sapevo dove inserire come avevo strutturato io "teoricamente" il problema quindi lo metto qua dopo tutto lo "spiegone":
-inserisco l'espressione tramite input
-divido ogni numero inserendolo nella pila con i relativi push (nella pila volevo inserire solo i numeri tralasciando parentesi e segno che avrei memorizzato da qualche altra parte)
-attraverso i pop trasformavo le stringhe di numeri in interi in modo da poterli sommare/dividere/sottrarre/moltiplicare
-Ho letto che alcuni consigliano di usare il parser a discesa ricorsiva ma veramente non capisco come utilizzarlo, ne come possa aiutarmi ( non siamo ancora arrivati a livelli cosi "complessi" di java ) o magari nonostante tutto non capisco solo io ma non credo perche' anzi, io ci metto buona volonta' a cercare e documentarmi ma su alcuni argomenti proprio so poco o niente..