代码
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 +".");
}
我输入RPN,例如:5 4 3 + *
为什么+不被视为TT_WORD,它不被视为它因此它抛出异常。
答案 0 :(得分:0)
来自StreamTokenizer
文档:
对于单个字符标记,其值为单个字符,转换为整数。
由于您的+
字符是单个字符,因此可能被视为TT_NUMBER
;您TT_NUMBER
的案例陈述也需要处理这些案件。我认为同样适用于你的不带引号的*
字符。因此你可以尝试这样的事情:
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;
希望这有帮助!