Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1107 connectés 

  FORUM HardWare.fr
  Programmation
  Java

   Parenthésage d'une expression

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Parenthésage d'une expression

n°1882502
anthp
Posté le 09-05-2009 à 22:55:40  profilanswer
 

Bonjour,
 
J'essaie de faire un programme qui vérifie qu'une expression est bien parenthésée.
J'ai un erreur à l'éxecution:

 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at PileArray.pop(PileArray.java
at Parenthesage.verifiParen(Parenthesage.java
at Parenthesage.main(Parenthesage.java

 
Je vois pas d'où vient le problème.
Je vous envoie mon code ci-dessous(qui fait 3 fichiers .java).
Quelqu'un peut m'aider?
 
Merci beaucoup d'avance

 

Code :
  1. //INTERFACE STACK
  2. public interface Stack
  3. {
  4. public Object push(Object i);
  5. public Object pop() ;
  6. public boolean isEmpty();
  7. }


 

Code :
  1. //CLASSE PILEARRAY
  2. import java.util.EmptyStackException;
  3. class PileArray implements Stack
  4. {
  5. Object[] pile;
  6. static int compteur=0;
  7. int debut;
  8. public PileArray()
  9. {
  10.  pile= new Object[10];
  11.  debut=-1;
  12. }
  13. public boolean isEmpty()
  14. {
  15.  return debut == -1;
  16. }
  17. public Object push(Object item)
  18. {
  19.  if(debut 1 < 10)
  20.  {
  21.   pile[ debut] = item;
  22.  }
  23.  return item;
  24. }
  25. public Object pop()
  26. {
  27.  debut--;
  28.  return pile[debut];
  29. }
  30. }


 

Code :
  1. //CLASSE PARENTHESAGE
  2. import java.io.*;
  3. public class Parenthesage
  4. {
  5. public static boolean verifiParen(String s)
  6. {
  7. PileArray stack = new PileArray ();
  8. for (int i = 0; i < s.length(); i )
  9. {
  10. switch (s.charAt(i))
  11. {
  12. case '(':
  13.     stack.push(new Character ('('));
  14. break;
  15. case '[':
  16.     stack.push(new Character ('['));
  17. break;
  18. case '{':
  19.     stack.push(new Character ('{'));
  20. break;
  21. case ')':
  22.     if (stack.isEmpty()) return false;
  23.     Character c = (Character)stack.pop();
  24.     if (!match(c.charValue(), s.charAt(i))) return false;
  25. break;
  26. case ']':
  27.     if (stack.isEmpty()) return false;
  28. c = (Character)stack.pop();
  29.     if (!match(c.charValue(), s.charAt(i))) return false;
  30. break;
  31. case '}':
  32.     if (stack.isEmpty()) return false;
  33. c = (Character)stack.pop();
  34.     if (!match(c.charValue(), s.charAt(i))) return false;
  35. break;
  36. default:
  37. break;
  38. }
  39. }
  40. if (stack.isEmpty())
  41. {
  42.  return true;
  43. }
  44. else
  45.  return false ;
  46. }
  47. public static boolean match(char lpar, char rpar) {
  48. switch (lpar) {
  49. case '(': return rpar == ')';
  50. case '[': return rpar == ']';
  51. case '{': return rpar == '}';
  52. default: return false;
  53. }
  54. }
  55. public static void main(String[] args) throws IOException {
  56. BufferedReader stdr;
  57. stdr = new BufferedReader(new InputStreamReader(System.in));
  58. String line = stdr.readLine();
  59. while (line != null) {
  60. if (verifiParen(line))
  61. System.out.println("well parenthesized" );
  62. else
  63. System.out.println("parenthesis mismatch" );
  64. line = stdr.readLine();
  65. }
  66. }
  67. }


Message édité par anthp le 09-05-2009 à 22:57:38
mood
Publicité
Posté le 09-05-2009 à 22:55:40  profilanswer
 

n°1882536
billgatesa​nonym
Posté le 10-05-2009 à 11:40:41  profilanswer
 

La ligne suivante est étrange:

if(debut 1 < 10)


Il est curieux d'appeler le pointeur "debut" alors que ce n'est le début qu'au début, mais pas après.
 
Il est curieux d'initialiser debut à -1 plutôt qu'à zéro.
 
Il serait plus rassurant de blinder le programme en testant si l'on ne dépasse les 10 élements dans le push et en testant 0 dans le cas du pop. Cela peut prendre un pouième de temps de traitement en plus, mais cela n'a pas d'importance, et dans le monde professionnel, il vaut mieux un programme sûr plutôt qu'un programme qui peut devenir défaillant.


Message édité par billgatesanonym le 10-05-2009 à 11:41:33

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

   Parenthésage d'une expression

 

Sujets relatifs
[ksh] expression regulière sur longueur chainemore than one row returned by a subquery used as an expression
Besoin d'aide pour une expression régulièreAide sur Expression eregi en PHP
Expression régulière interval de tempspreg_replace : problèmes d'expression régulière
[Résolu] Expression régulière[RESOLU] C# - Expression Régulière
Remplacer une expression régulière par une autreEvaluer une expression puis passer la valeur dans une variable
Plus de sujets relatifs à : Parenthésage d'une expression


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR