2013-04-19 2 views
-1

J'essaie de remplacer une expression par une notation de préfixe. J'ai été capable de comprendre la notation postfixe et je me demandais s'il était possible d'utiliser le modèle de base de ma classe de postfix lors de la création de ma classe de préfixes. Je veux prendre une expression comme ... (6 * (24 + 81)) et avoir une sortie de: * 6 + 24 81. Est-ce possible sans tenir compte des niveaux? ... ce dont j'ai besoin une variable de suivi lorsque ma boucle entre une parenthèse de l'expression? J'ai juste du mal à imaginer comment la structure fonctionne.Création d'une expression de notation de préfixe

Voici mon code postfix:

static Stack operatorStack = new Stack(); 
String ConvertToPostfix(String exp) { 
    exp = "("+exp+")"; 
    int i; 
    char token; 
    String output = ""; 

    for (i = 0; i < exp.length(); i++) { 
     token = exp.charAt(i); 
     if (Character.isLetterOrDigit(token) == true) 
      output += token; 
     else if (token == '(') 
      operatorStack.push(token); 
     else if (token == ')') { 
      char topChar; 
      while ((topChar = peekAtTop()) != '(') { 
       output += topChar; 
       popAtTop(); 
      } 

     operatorStack.pop(); 
     } 
     else { 
      while (priority(token) <= priority(peekAtTop())) { 
       output += peekAtTop(); 
       popAtTop(); 
      } 
      operatorStack.push(token); 
     } 
} 
    return output; 

} 

Répondre

2

essentialy, le expressions are tree structures.

est ici une illustration aléatoire de ceci: 3 * ((7 + 1)/4 + (17 - 5)

Pour changer la représentation linéaire (qui est, l'expression sous forme de chaîne) que vous venez de changer la façon dont vous traversez l'arbre. L'article Wikipedia ci-dessus contient tous les trois exemples.

Ce que vous devez faire est:

  • apprendre à représenter trees in Java (toujours à portée de main);
  • analyser votre expression dans un arbre (plutôt simple), StringTokenizer est votre ami; Traduire les trois procédures de traversée en Java;
  • appelez n'importe quelle procédure que votre professeur demanderait. (BTW écoute le professeur plus ne fera pas mal.)

Espérons que cela aide!

Questions connexes