PDA

View Full Version : [Java] Aiuto Parsing e calcoli


linda.bellucci
30-08-2008, 03:17
Salve a tutti voi del forum di hardware Upgrade,
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..

a dire la verità al professore non importa se è copiato o se la libreria è già stata compilata (infatti l'importante è che si citi la fonte da dove è stato preso), vuole solo vedere che funziona come lo abbiamo pensato, e che riesco a spiegargli il funzionamento del codice.
(questo perchè sono rimasta sola (gli altri si sono ritirati) a dare l'esame on un esame di gruppo e quindi e quindi visto le mie lacune il prof mi ha "concesso" quanto scritto).

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[5];

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 che passandogli i due array come variabile e un indice, mi esgue le operazioni dell'aarray dei calcoli.. 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)"

in altro caso che non ho messo è il seguente:
(id1)+(-id2*id3)

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]
ho qualche idea su come procedere, ma non so metterla in pratica,
volevo usare charAt per leggere ogni carattere della stringa, e poi volevo trovare un modo per valutare le operazioni che sono nelle parentesi più interne.

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.

Pss: sto tentando di usare eclipse 3.2

vladix
30-08-2008, 08:06
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.


forse avro capito male ... forse intendevi collegarti a qualche db tramite "l'odbc di windows " in tal caso dacci un ochiata qui (http://www.hwupgrade.it/forum/showpost.php?p=21464712&postcount=10)
PS: mettici il linguaggio tra parentesi quadre se no ti chiudono il 3d (http://www.hwupgrade.it/forum/showthread.php?t=1649196)

dupa
30-08-2008, 11:00
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:


Cercando su google, primo risultato:
è un progetto opensource, quindi hai anche i sorgenti a disposizione
JEP - Java Math Expression Parser
http://sourceforge.net/projects/jep/

Come mai devi usare ODBC? non puoi usare JDBC?


import com.singularsys.jep.Jep;
...
1: Jep jep = new Jep();
2: jep.addVariable("x", 10);
3: try {
4: jep.parse("x+1");
5: Object result = jep.evaluate();
6:
7: System.out.println("x + 1 = " + result);
8:
9: } catch (JepException e) {
10: System.out.println("An error occured: " + e.getMessage());
11: }