[Débutante] API DOM : Une erreur de déclaration "parser.parse()" qui ne compile pas
Bonjour a vous tous
j'ai besoin de votre aide pour un erreur de declaration API DOM
pourriez vous verifier ma déclaration en rouge car je ne sais pas
ou est l'erreur
merci de votre temps
Voci mon code
Code:
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
|
public class calculatrice2 {
public static void main(String[] args) {
int num1 = Integer.parseInt(args[0]);
String num2 = (args[1]);
int num3 = Integer.parseInt(args[2]);
int numsum = (num1+num3);
int numsub = (num1-num3);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder parser = factory.newDocumentBuilder();
Document doc = parser.parse();
Element math = doc.createElement("math");
math.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML");
doc.appendChild(math); Element mrow = doc.createElement("mrow");
Element mn1 = doc.createElement("mn");
mn1.appendChild(doc.createTextNode(args[0]));
Element mo1 = doc.createElement("mo");
mo1.appendChild(doc.createTextNode(args[1]));
Element mn2 = doc.createElement("mn");
mn2.appendChild(doc.createTextNode(args[2]));
Element mo2 = doc.createElement("mo");
mo2.appendChild(doc.createTextNode("="));
Element mn3 = doc.createElement("mn");
mn2.appendChild(doc.createTextNode("results"));
Element mrow1 = doc.createElement("mrow");
Element mtext = doc.createElement("mtext");
mtext.appendChild(doc.createTextNode("vrai"));
mrow.appendChild(mn1);
mrow.appendChild(mo1);
mrow.appendChild(mn2);
mrow.appendChild(mo2);
mrow.appendChild(mn3);
mrow.appendChild(mrow1);
mrow1.appendChild(mtext);
math.appendChild(mrow);
switch (args[2])
{
//Addition
case "+":
Element mn6 = doc.createElement ( "mn");
mn6.appendChild(doc.createTextNode(Integer.toString(numsum)));
//Soustraction
case "-":
Element mn7 = doc.createElement ( "mn");
mn7.appendChild(doc.createTextNode(Integer.toString(numsub)));
//Comparaisons
case "<":
if(Integer.parseInt(args[1])<Integer.parseInt(args[3]))
//Result=="vrai";
{Element mtext1 = doc.createElement ("mtext");
mtext.appendChild(doc.createTextNode("vrai"));}
else //Result=="faux";
{Element mtext2 = doc.createElement ("mtext");
mtext.appendChild(doc.createTextNode("faux"));}
case ">":
if(Integer.parseInt(args[1])>Integer.parseInt(args[3]))
//Result=="vrai";
{Element mtext3 = doc.createElement ("mtext");
mtext.appendChild(doc.createTextNode("vrai"));}
else //Result=="faux";
{Element mtext4 = doc.createElement ("mtext");
mtext.appendChild(doc.createTextNode("faux"));}
}
TransformerFactory tfact = TransformerFactory.newInstance();
Transformer transformer = tfact.newTransformer();
transformer.setOutputProperty("encoding", "ISO-8859-1");
DOMSource source = new DOMSource(doc);
FileWriter fw = new FileWriter(args[0]);
StreamResult result = new StreamResult(System.out);
transformer.transform(source, result);}
} |
voici input attendu lorsque je tape la ligne de commande suivante
java calculatrice2 2-1
Code:
1 2 3 4 5 6 7 8 9 10 11
|
<?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> |
et voici le resultat attendu lorsque je tape la ligne de commande
java calculatrice2 1.5 "<" 2
Code:
1 2 3 4 5 6 7 8 9 10 11
|
<?xml version="1.0" encoding="ISO-8859-1"?>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<mn>1.5</mn>
<mo><</mo>
<mn>2</mn>
<mo>=</mo>
<mrow><mtext>vrai</mtext></mrow>
</mrow>
</math> |
je pense que je suis encore loin de la solution!
TRY et catch comment ca marche vous avez raison pour l'exception
Citation:
Envoyé par
joel.drigo
Salut,
- DocumentBuilder.parse() est fait pour "lire" une source (un fichier par exemple).
Pour créer un Document, il faut faire :
Code:
1 2
| DocumentBuilder documentBuilder = factory.newDocumentBuilder();
Document doc = documentBuilder.newDocument(); |
- Ensuite, il y a plusieurs méthodes que tu appelles qui soulèvent des exceptions, qu'il te faudra attraper (try/catch ou throws).
- Il y a par ailleurs un problème dans le résultat, mais je te laisse regarder ça toi-même pour l'instant (indice : il faut tester l'opérateur)
Un gros merci pour l'aide!
mon code fonctionne lorsque je tape la ligne de commande
java calculatrice 2 - 1
mais lorsque j'utilise
java calculatrice 1.5 "<" 2
la rien ne va plus
et je ne sait pas comment utilise try et catch dans les paramétrés entre
pourriez vous m'aide S.V.P
voici mon nouveau code
Code:
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
|
public class calculatrice2 {
public static void main(String[] args) throws Exception {
double num1 = Integer.parseInt(args[0]);
String num2 = (args[1]);
double num3 = Integer.parseInt(args[2]);
double numsum = (num1+num3);
double numsub = (num1-num3);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
Document doc = documentBuilder.newDocument();
Element mrow = doc.createElement("math");
mrow.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML");
doc.appendChild(mrow);
Element mrow0 = doc.createElement("mrow");
mrow.appendChild(mrow0);
Element mn1 = doc.createElement("mn");
mrow.appendChild(mn1);
mn1.appendChild(doc.createTextNode(args[0]));
Element mo1 = doc.createElement("mo");
mrow.appendChild(mo1);
mo1.appendChild(doc.createTextNode(args[1]));
Element mn2 = doc.createElement("mn");
mrow.appendChild(mn2);
mn2.appendChild(doc.createTextNode(args[2]));
Element mo2 = doc.createElement("mo");
mrow.appendChild(mo2);
mo2.appendChild(doc.createTextNode("="));
mrow.appendChild(mo2);
switch (num2)
{
case "+":
Element mn3 = doc.createElement("mn");
String numsum1 = Double.toString(numsum);
mn3.appendChild(doc.createTextNode(numsum1));
mrow.appendChild(mn3);
Element mrow2 = doc.createElement("mrow");
mrow.appendChild(mrow2);
break;
case "-":
Element mn7 = doc.createElement ( "mn");
Element mn4 = doc.createElement("mn");
String numsub1 = Double.toString(numsub);
mn4.appendChild(doc.createTextNode(numsub1));
mrow.appendChild(mn4);
Element mrow3 = doc.createElement("mrow");
mrow.appendChild(mrow3);
break;
case "<":
if(Integer.parseInt(args[1])<Integer.parseInt(args[3]))
{ Element mtext = doc.createElement("mtext");
mtext.appendChild(doc.createTextNode("vrai"));
mrow.appendChild(mtext);
mrow.appendChild(mrow);
}
case ">":
if(Integer.parseInt(args[1])>Integer.parseInt(args[3]))
{ Element mtext = doc.createElement("mtext");
mtext.appendChild(doc.createTextNode("vrai"));
mrow.appendChild(mtext);
mrow.appendChild(mrow);
}
break;
}
// Affichage du document en ligne de commande
TransformerFactory tfact = TransformerFactory.newInstance();
Transformer transformer = tfact.newTransformer();
transformer.setOutputProperty("encoding", "ISO-8859-1");
DOMSource source = new DOMSource(doc);
FileWriter fw = new FileWriter(args[0]);
StreamResult result = new StreamResult(System.out);
transformer.transform(source, result);
}} |
J'apprecie ton explication et sa ma éclaré sur try/catch mais je suis imcapable d'entre un double en paramètre
Encore merci pour toutes les explications données
J'ai modifié mom code avec le try sa fonctionne bien lorsque Je tape la ligne de commande !
java calculatrice 2 - 1
malgre que le output est en chiffre double plutôt d'avoir 2 a l'écran j'ai 2.0
mais lorsque je tape
java calculatrice 1.5 "<" 2
je tomber dans l'erreur du cath "le premier operade doit être un nombre"
il ne prend pas le double
comment faire pour avoir des parametres différents en entré
est-ce que je doit formatter mon entre et comment
Merci encore de tout ton temps je ne sais comment te remercier...
Gros merci avant tout, je ne sais pas si j'ai tout compris les explication mais voilà
Selon ce que j'ai compris comme débutante
Voici mon nouveau code
Code:
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
|
public static void main(String[] args) throws Exception {
boolean operateur = arg[1].indexOf('"')==+1 && arg[3].indexOf('"')==-1;
try {
double num1 = Double.parseDouble(args[0]);
try {
double num3 = Double.parseDouble(args[2]);
run(num1, operateur, num3);
}
catch( NumberFormatException e) {
System.err.println("Erreur: le second opérande doit être un nombre !");
}
}
catch( NumberFormatException e) {
System.err.println("Erreur: le premier opérande doit être un nombre !");
}
}
private static void run(double num1, boolen operateur, double num3) throws Exception {
double numsum = (num1+num3);
double numsub = (num1-num3);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
Document doc = documentBuilder.newDocument();
Element mrow = doc.createElement("math");
mrow.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML");
doc.appendChild(mrow);
Element mrow0 = doc.createElement("mrow");
mrow.appendChild(mrow0);
Element mn1 = doc.createElement("mn");
mrow.appendChild(mn1);
String num1s = String.valueOf(num1) ;
if ( num1s.endsWith(".0") ) {
num1s = num1s.substring(0, num1s.length()-2);
}
mn1.appendChild(doc.createTextNode(num1s));
mrow.appendChild(mn1);
Element mo1 = doc.createElement("mo");
mrow.appendChild(mo1);
mo1.appendChild(doc.createTextNode(operateur));
Element mn2 = doc.createElement("mn");
mrow.appendChild(mn2);
String num3s = String.valueOf(num3) ;
if ( num3s.endsWith(".0") ) {
num3s = num3s.substring(0, num3s.length()-2);
}
mn2.appendChild(doc.createTextNode(num3s));
mrow.appendChild(mn2);
Element mo2 = doc.createElement("mo");
mrow.appendChild(mo2);
mo2.appendChild(doc.createTextNode("="));
mrow.appendChild(mo2);
switch (operateur)
{
case "+":
String numsum1 = Double.toString(numsum);
Element mn3 = doc.createElement("mn");
mn3.appendChild(doc.createTextNode(numsum1));
mrow.appendChild(mn3);
break;
case "-":
String numsub1 = Double.toString(numsub);
Element mn4 = doc.createElement("mn");
mn4.appendChild(doc.createTextNode(numsub1));
mrow.appendChild(mn4);
break;
case "<":
Element mrow3 = doc.createElement("mrow");
mrow.appendChild(mrow3);
Element mtext = doc.createElement("mtext");
mtext.appendChild(doc.createTextNode("vrai"));
mrow.appendChild(mtext);
Element mrow4 = doc.createElement("mrow");
mrow.appendChild(mrow4);
break;
case">":
Element mrow5 = doc.createElement("mrow");
mrow.appendChild(mrow5);
Element mtext1 = doc.createElement("mtext");
mtext1.appendChild(doc.createTextNode("Faux"));
mrow.appendChild(mtext1);
Element mrow6 = doc.createElement("mrow");
mrow.appendChild(mrow6);
break;
}
Element mrow2 = doc.createElement("mrow");
mrow.appendChild(mrow2); |
Maintenant lorsque je tape la ligne de commande
java calculatrice 2 - 1
Le résultat est bon et les chiffre sont des entiers selon vos conseils ;)
Lorsque je tape la ligne de commande
java calculatrice 1.5 "<" 2
Le résultat est bon a l’exception des lignes que j'ai mis rouge qui ne s'affiche pas à l’écran
Pourriez vous vérifiez S.V.P.
P.S. je sais que le code pourrait être amélioré... :oops:
Comment te remercier pour tous ton temps et ton aide
Un gros merci pour tout
J’ai fait quelque ajustement pour le output mais tout fonctionne très bien
Encore merci pour tout :oops:
Java avec Api Dom n'ai pas si facile a programmer que ça, il y a beaucoup de détail à apprendre
ENCORE MERCI
Ton aide, ma été précieuse
:merci::merci::merci:
A la prochaine...