Bonjour,

Je cherche à créer une calculatrice élémentaire en JAVA qui réagisse en ligne de commande (pour introduire les paramètres) et qui utilise l'API DOM.

Ainsi, avec :

java Calculatrice 1.5 "<" 2

on aurait :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="ISO-8859-1"?>
 <math xmlns="http://www.w3.org/1998/Math/MathML">
   <mrow>
     <mn>1.5</mn>
     <mo>&lt;</mo>
     <mn>2</mn>
     <mo>=</mo>
     <mrow><mtext>vrai</mtext></mrow>
  </mrow>
  </math>
Avec: java Calculatrice 2 - 1

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="ISO-8859-1"?>
 <math xmlns="http://www.w3.org/1998/Math/MathML">
   <mrow>
     <mn>2</mn>
     <mo>-</mo>
     <mn>1</mn>
     <mo>=</mo>
     <mn>1.0</mn>
   </mrow>
 </math>
Mon code JAVA :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
 
import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import java.util.*;
public class Calculatrice {
public static void main(String[] args) throws Exception {
String uri="http://www.w3.org/1998/Math/MathML";
//Paramètres en ligne de commande
//Premier nombre
String mn1= new String (args[1]);
//Opérateur
String m0= new String (args[2]);
//Deuxième nombre
String mn2= new String (args[3]);
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder parser =
factory.newDocumentBuilder();
Document doc = parser.newDocument();
 
//Création du modèle DOM
//1) Racine
Element mrow = doc.createElementNS("http://www.w3.org/1998/Math/MathML", "mrow");
doc.appendChild(mrow);
//2) Premier nombre
Element mn = doc.createElement ("http://www.w3.org/1998/Math/MathML", "mn");
mn.appendChild(doc.createTextNode(args[1]));
//3) Opérateurs
Element mo = doc.createElement ("http://www.w3.org/1998/Math/MathML", "mo");
mo.appendChild(doc.createTextNode(args[2]));
//mo.appendChild(doc.createTextNode("+"));
//mo.appendChild(doc.createTextNode("-"));
//mo.appendChild(doc.createTextNode("&lt;"));
//mo.appendChild(doc.createTextNode("&gt;"));
//3) Deuxième nombre
Element mn = doc.createElement ("http://www.w3.org/1998/Math/MathML", "mn");
mn.appendChild(doc.createTextNode(args[3]));
//4) Egalité
Element mo = doc.createElement ("http://www.w3.org/1998/Math/MathML", "mo");
mo.appendChild(doc.createTextNode("="));
//5) Result : QUELLE FONCTION? UNE FONCTION OU A DIVISER SELON DES CAS DIFFERENTS?
Element mn = doc.createElement ("http://www.w3.org/1998/Math/MathML", "mn");
//FONCTION UNIQUE
//mn.appendChild(doc.createTextNode(FONCTION(args[1], args[2], args[3])));
 
//4 CAS D'OPERATIONS:
switch (args[2])
{
//Addition
case '+':
Element mn = doc.createElement ("http://www.w3.org/1998/Math/MathML", "mn");
mn.appendChild(doc.createTextNode(int(args[1])+int(args[3])));
 
//Soustraction
case '-':
Element mn = doc.createElement ("http://www.w3.org/1998/Math/MathML", "mn");
mn.appendChild(doc.createTextNode(int(args[1])-int(args[3])));
 
//Comparaisons
case '"<"':
	if(int(args[1])<int(args[3])) 
		//Result=="vrai";
		{Element mtext = doc.createElement ("mtext");
		mtext.appendChild(doc.createTextNode("vrai"));}
	else //Result=="faux";
		{Element mtext = doc.createElement ("mtext");
		mtext.appendChild(doc.createTextNode("faux"));}
case '">"':
	if(int(args[1])>int(args[3])) 
		//Result=="vrai";
		{Element mtext = doc.createElement ("mtext");
		mtext.appendChild(doc.createTextNode("vrai"));}
	else //Result=="faux";
		{Element mtext = doc.createElement ("mtext");
		mtext.appendChild(doc.createTextNode("faux"));}
}
// Affichage du document en ligne de commande
TransformerFactory tfact =
TransformerFactory.newInstance();
Transformer transformer =
tfact.newTransformer();
DOMSource source = new DOMSource(doc);
FileWriter fw = new FileWriter(doc);
StreamResult result = new StreamResult(System.out);
transformer.transform(source, result);
}
}
J’obtiens beaucoup d’erreurs qui sont systématiques. Mais de façon générale, je ne comprends pas bien comment gérer les paramètres entrant pour les inclure dans un arbre DOM :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
Calculatrice.java:58: error: '.class' expected
mn.appendChild(doc.createTextNode(int(args[1])+int(args[3])));
                                     ^
Calculatrice.java:58: error: ')' expected
mn.appendChild(doc.createTextNode(int(args[1])+int(args[3])));
                                      ^
Calculatrice.java:58: error: not a statement
mn.appendChild(doc.createTextNode(int(args[1])+int(args[3])));
                                          ^
Calculatrice.java:58: error: ';' expected
mn.appendChild(doc.createTextNode(int(args[1])+int(args[3])));
                                             ^
Calculatrice.java:58: error: not a statement
mn.appendChild(doc.createTextNode(int(args[1])+int(args[3])));
                                               ^
Calculatrice.java:58: error: ';' expected
mn.appendChild(doc.createTextNode(int(args[1])+int(args[3])));
                                                  ^
Calculatrice.java:58: error: not a statement
mn.appendChild(doc.createTextNode(int(args[1])+int(args[3])));
                                                       ^
Calculatrice.java:58: error: ';' expected
mn.appendChild(doc.createTextNode(int(args[1])+int(args[3])));
                                                          ^
Calculatrice.java:63: error: '.class' expected
mn.appendChild(doc.createTextNode(int(args[1])-int(args[3])));
                                     ^
Calculatrice.java:63: error: ')' expected
mn.appendChild(doc.createTextNode(int(args[1])-int(args[3])));
                                      ^
Calculatrice.java:63: error: not a statement
mn.appendChild(doc.createTextNode(int(args[1])-int(args[3])));
                                          ^
Calculatrice.java:63: error: ';' expected
mn.appendChild(doc.createTextNode(int(args[1])-int(args[3])));
                                             ^
Calculatrice.java:63: error: not a statement
mn.appendChild(doc.createTextNode(int(args[1])-int(args[3])));
                                               ^
Calculatrice.java:63: error: ';' expected
mn.appendChild(doc.createTextNode(int(args[1])-int(args[3])));
                                                  ^
Calculatrice.java:63: error: not a statement
mn.appendChild(doc.createTextNode(int(args[1])-int(args[3])));
                                                       ^
Calculatrice.java:63: error: ';' expected
mn.appendChild(doc.createTextNode(int(args[1])-int(args[3])));
                                                          ^
Calculatrice.java:66: error: unclosed character literal
case '"<"':
     ^
Calculatrice.java:66: error: unclosed string literal
case '"<"':
        ^
Calculatrice.java:67: error: illegal start of expression
        if(int(args[1])<int(args[3]))
        ^
Calculatrice.java:67: error: ';' expected
        if(int(args[1])<int(args[3]))
          ^
Calculatrice.java:67: error: not a statement
        if(int(args[1])<int(args[3]))
           ^
Calculatrice.java:67: error: ';' expected
        if(int(args[1])<int(args[3]))
              ^
Calculatrice.java:67: error: not a statement
        if(int(args[1])<int(args[3]))
                   ^
Calculatrice.java:67: error: ';' expected
        if(int(args[1])<int(args[3]))
                      ^
Calculatrice.java:67: error: > expected
        if(int(args[1])<int(args[3]))
                           ^
Calculatrice.java:67: error: ';' expected
        if(int(args[1])<int(args[3]))
                            ^
Calculatrice.java:67: error: illegal start of expression
        if(int(args[1])<int(args[3]))
                                ^
Calculatrice.java:67: error: ';' expected
        if(int(args[1])<int(args[3]))
                                 ^
Calculatrice.java:67: error: illegal start of expression
        if(int(args[1])<int(args[3]))
                                  ^
Calculatrice.java:67: error: ';' expected
        if(int(args[1])<int(args[3]))
                                   ^
Calculatrice.java:67: error: illegal start of expression
        if(int(args[1])<int(args[3]))
                                    ^
Calculatrice.java:67: error: ';' expected
        if(int(args[1])<int(args[3]))
                                     ^
Calculatrice.java:71: error: 'else' without 'if'
        else //Result=="faux";
        ^
Calculatrice.java:74: error: orphaned case
case '">"':
^
Calculatrice.java:74: error: unclosed character literal
case '">"':
     ^
Calculatrice.java:74: error: illegal start of expression
case '">"':
       ^
Calculatrice.java:74: error: unclosed string literal
case '">"':
        ^
Calculatrice.java:75: error: '.class' expected
        if(int(args[1])>int(args[3]))
              ^
Calculatrice.java:75: error: not a statement
        if(int(args[1])>int(args[3]))
                   ^
Calculatrice.java:75: error: ';' expected
        if(int(args[1])>int(args[3]))
                      ^
Calculatrice.java:75: error: not a statement
        if(int(args[1])>int(args[3]))
                        ^
Calculatrice.java:75: error: ';' expected
        if(int(args[1])>int(args[3]))
                           ^
Calculatrice.java:75: error: not a statement
        if(int(args[1])>int(args[3]))
                                ^
Calculatrice.java:75: error: ';' expected
        if(int(args[1])>int(args[3]))
                                   ^
Calculatrice.java:79: error: 'else' without 'if'
        else //Result=="faux";
        ^
Calculatrice.java:91: error: <identifier> expected
transformer.transform(source, result);
                     ^
Calculatrice.java:91: error: <identifier> expected
transformer.transform(source, result);
                            ^
Calculatrice.java:91: error: <identifier> expected
transformer.transform(source, result);
                                    ^
Calculatrice.java:93: error: class, interface, or enum expected
}
^
49 errors

Merci pour vos lumières !

Radu