我是新来的,我不知何故被卡住了。 我创建了一个递归算法,使用全局变量来记住他做出递归调用的位置,我试图摆脱这个变量,对我来说似乎不是一个好的解决方案。
有没有机会摆脱这个全局变量?我无法调整方法头,因此方法的界面是固定的。
在这里你可以看到我的代码:
static int pos = -1;
static boolean writeInfix(char[] expr) {
boolean result;
pos++;
int printpos = pos;
if(expr[pos]=='+'||expr[pos]=='-'||expr[pos]=='/'||expr[pos]=='*'){
System.out.print("(");
writeInfix(expr);
System.out.print(expr[printpos]);
result = writeInfix(expr);
System.out.print(")");
return result;
}else if(expr[pos] >= 'a' && expr[pos] <= 'z'){
System.out.print(expr[pos]);
return true;
}else{
return false;
}
}
感谢您的帮助:)
答案 0 :(得分:2)
您可以添加一个新的辅助方法,在其中控制其变量,让writeInfix(char[]
)只是一个包装器,除了调用“真实”方法之外什么都不做。
在这种新方法中,pos
是一个文件。
writeInfix
),而不必担心副作用(第一次调用后pos
初始化为错误值。)答案 1 :(得分:0)
您应该能够使用该位置作为附加参数编写另一种方法:
private static boolean writeInfix(char[] expr, int pos) {
boolean result;
int printpos = pos;
if(expr[pos]=='+'||expr[pos]=='-'||expr[pos]=='/'||expr[pos]=='*'){
System.out.print("(");
writeInfix(expr);
System.out.print(expr[printpos]);
result = writeInfix(expr, pos + 1);
System.out.print(")");
return result;
}else if(expr[pos] >= 'a' && expr[pos] <= 'z'){
System.out.print(expr[pos]);
return true;
}else{
return false;
}
}
在你已有的方法中,你只需要打电话
static boolean writeInfix(char[] expr) {
return writeInfix(expr, -1);
}
答案 2 :(得分:0)
您可以将pos作为参数添加到writeInfix
函数。
static boolean writeInfix(char[] expr, int pos);
如果您返回false,请返回-1。无论您返回true,都要返回当前的pos
值。