2016-03-29 1 views
1

Dans le codeStreamTokenizer does't traiter + comme mot

 switch(token){ 

        case StreamTokenizer.TT_EOF: 
         eof = true; 
         break; 
        case StreamTokenizer.TT_NUMBER: 
         double value = tokenizer.nval; 
         operands.add(value); 
         break; 
        case StreamTokenizer.TT_WORD: 
         operate(tokenizer.sval); 
         break; 
        default: 
         throw new WrongPhraseException("Unnexpected operator or operand: " + tokenizer.sval +"."); 
       } 

Je donne comme entrée RPN, ex: 5 4 3 + *

Pourquoi + non traitée comme TT_WORD, il n'est pas traitée comme ça, il jette une exception.

Merci d'avance.

+0

Qu'est-ce qui vous fait penser qu'il devrait être traité comme un mot? –

+0

ok sry pour gâcher, je me trompe avec une autre classe que je voulais utiliser - tokenizer String. aucun commentaire;) cependant quelqu'un peut trouver ce lien utile :) http://www.programcreek.com/java-api-examples/java.io.StreamTokenizer – kolboc

Répondre

0

De la documentation StreamTokenizer:

Pour un jeton de caractère, sa valeur est le seul caractère, converti en un entier.

Depuis votre personnage + est seul caractère, il est probablement traité comme TT_NUMBER; votre déclaration de cas pour TT_NUMBER devra également gérer ces cas. La même chose s'appliquera à votre personnage * non cité, je suppose. Ainsi, vous pouvez essayer quelque chose comme ceci:

case StreamTokenizer.TT_NUMBER: 
    Double value = new Double(tokenizer.nval); 

    if (Character.isDigit(value.intValue()) { 
     operands.add(value.doubleValue()); 

    } else { 
     // Possibly dealing with operator here. The hard/fun part is 
     // in coercing that double value back to its tokenized string 
     // form. 
     operate(new Character((char) tokenizer.nval).toString()); 
    } 

    break; 

Espérons que cela aide!