我有一个程序,我试图用字符串连接令牌对象,使用操作数(数字和变量)和运算符(+, - ,*,/):
private static Token evalOp(Token op, Token t1, Token t2) {
return "Operator: [" + op + "]; Operand1: [" + t1 +"]; Operand2 [" + t2 + "]";
}
我有一个单独的令牌数组,我正在尝试添加。
private static ArrayList<Token> infixToPostfix(ArrayList<Token> intokens) {
String string = "";
Stack s = new Stack();
for (int i = 0; i < s.length(); i++){
if (intokens[i]==operand){
string+=intokens[i];
}
else if (intokens[i]==operator){
while (!s.empty()/*&&hasHigherPrecedence(s.top(), intokens[i])*/){
string+=s.pop();
s.pop();
}
s.push(intokens[i]);
}
}
}
它用于中缀后缀程序。我想将中缀转换为postfix并将其显示在数组中。我原本以为问题与连接字符串和数字有关,但我现在认为我错了。您会注意到第一个代码刚刚被替换。那是因为旧代码有几个连接数字和标记的if语句。令牌可能是数字或变量。我有点忘了并且犯了愚蠢的错误,就像上面的数字一样对待它。
无论如何,我希望用户输入中缀表达式,比如
2 * 3 + 5
并将其转换为
2 3 * 5 +
明白我的意思?它接受一个表达式,然后将其作为后缀表达式返回。但是后缀表达式需要在它周围有这些类型的字符串,因此输出实际上是:
[num: 2], [num: 3], [op: *], [num: 5], [op: +]
明白我的意思?除了制作令牌的arrayList的主要方法之外,我的代码中还有另一个函数:
private static ArrayList<Token> parse(String s) {
// make a loop and take each char out of the String s, one by one and check
// to see what token type it is. Then store the token type in an ArrayList of tokens
for (int i = 0; i < s.length(); i++){
char c = s.charAt(i);
String v = Character.toString(c);
TokenType t = getTokenType(c);
if (t==null){
//print error
System.out.println("Error");
}
else if(!t.equals(TokenType.WS)){
//add to array
list.add(TokenType.WS);
}
}
return list;
}
我有更多的代码,但基本上,我想将中缀转换为后缀,我想评估它。它必须通过这个算法作为测试:
class SimpleCalcTest {
public static void test() {
String[] inputs = {
"3*4 + 5",
"3 + 4*5",
"(1+1)*(5-2)",
"(3*4+5)*(3*3 + 4*4)"
};
for (int i=0; i<inputs.length; i++) {
String s = inputs[i];
System.out.println();
System.out.println();
System.out.println("test: input = " + s);
String r = SimpleCalc.evalExpression(s);
System.out.println("\tresult = " + r);
}
}
public static void main(String[] args) {
SimpleCalc.commandLine();
}
答案 0 :(得分:0)
你可以。你做了别的错事,但你还没有给出足够的背景。以下作品将其与您自己的代码进行比较:
class Foo {
public static void main(String[] args) {
System.out.println(demo());
}
static String demo() {
int t1 = 5;
int t2 = 3;
return "Answer: " + (t1 - t2);
}
}
$ java -version
java version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.6) (7u79-2.5.6-0ubuntu1.14.04.1)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)
$ javac Foo.java
$ java Foo
Answer: 2