Java problemi di Parsing e calcoli

Aperto da linda.bellucci, 29 Agosto 2008, 04:24:21

Discussione precedente - Discussione successiva

0 Utenti e 1 Visitatore stanno visualizzando questa discussione.

linda.bellucci

Salve a tutti voi del forum,
sono dietro a redigere un progettino in java, per un esame universitario, premetto che non sono una programmatrice, e sto diventando matta per scrivere quattro righe di codice..

Lo scopo del progetto è quello di leggere da un data base valori di alcuni campi, inserirle in degli array e farci dei calcoli..

I campi di questi datbase contengono sia dati,(numeri reali) che stringhe che non sono altro le operazioni che devono essere eseguite usando i dati recuperati dal primo database.



Tra le miriadi di problematiche ho anche quello di ottenere il risultato di alcuni calcoli scritti in formato stringa contenuti in un array di stringhe, come questo;

// ======= calcoli =============
String [] calcoli;

calcoli = new [n];

calcoli[0] = "id1+id2-id3";
calcoli[1] = "(id1+id2)*id3";
calcoli[2] = "((id1+id2)/id4)+id3";
calcoli[3] = "(((id1+id2)/id4)+id3)*3,14";
calcoli[4] = "(id4/365)+(12,3*id2)";

oltre a non capire come fare una sorta di parsing(credo che si scriva così) che tenga conto di parentesi tonde annidate (e non), e di numeri con e senza virgola (ho le variabili "reali" ;) che sono contenute in un array come questo:

// ======= array valori ===========
double []valori;
valori = new double[4];

valori[0] = 0;
valori[1] = 10,89;
valori[2] = 110,894444;
valori[3] = 0,89;
valori[4] = 3;

nel caso dei calcoli
per esempio
double id0 = 0;          -->valori[0]
double id1 = 10,89;      -->valori[1]
double id2 = 110,894444;  -->valori[2]
double id3 = 0,89;      -->valori[3]
double id4 = 3;          -->valori[4]

Alla fine dovrei ottenere dalla classe o dal metodo utlizzato i seguenti risultati..

se seleziono l'array "calcoli" con indice 0 dovrò ottenere:
 120,8944   --> (id1+id2-id3)

se seleziono l'array "calcoli" con indice 1 dovrò ottenere:
 108,3882  --> "(id1+id2)*id3"

se seleziono l'array "calcoli" con indice 2 dovrò ottenere:
 41,4848146666667  --> "((id1+id2)/id4)+id3"

se seleziono l'array "calcoli" con indice 3 dovrò ottenere:
 130,2623  --> "(((id1+id2)/id4)+id3)*3,14"

se seleziono l'array "calcoli" con indice 4 dovrò ottenere:
 1364,01  --> "(id4/365)+(12,3*id2)"

La cosa interessante sarebbe poi trovare un modo di indirizzare il valore della variabile sull'array dei dati, nel senso che se ho per esempio:
calcoli[0] = "id1+id2-id3";

mi vada a prendere il valore delle variabili direttamente dentro l'array dei dati ad esempio  valori[1] + valori[2] - valori[3]
avete qualche idea su come procedere?

vi ringrazio anticipatamente Linda ^^

Ps: avete qualche idea su come collegarmi al driver odbc di windows? e poi come posso passare i dati letti in un array? se avete qualche esempio sono molto graditi.

benna

Ciao e benvenuta,
Questo problema non è per nulla banale, cercherò di darti alcuni suggerimenti.
Per prima cosa dovresti trasformare le espressioni in alberi binari, in modo da gestire le parentesi annidate, le priorità degli operatori, ecc.; una volta creato l'albero sarà sufficiente iniziare a eseguire i calcoli dall'ultimo livello fino alla radice.
Per effettuare il parsing puoi usare uno switch che contiene confronti effettuati con il metodo equals(), è molto lungo ma è semplice.
Per non doversi preoccupare delle virgole ti basta castare i numeri reali in numeri float, in modo da evitare anche problemi di troncamento dei decimali.
A questo Link è presente la documentazione ufficiale di java riguardo ad odbc.
Facci sapere se riesci a risolvere.