我一直在尝试将python代码转换为Java,我有一个头部撞击时间试图找出为什么我的解决方案一直给我一个索引越界错误。有什么想法吗?我认为这是一个简单的语法或计数错误,但作为一个Python程序员,我看不出它在Java中不起作用。
Python代码:
def evaluate_formula(formula, variables, values):
stack = []
for char in formula:
if char == '(':
stack.append(char)
elif char == ')':
while stack[-1] != '(':
operator = stack.pop()
operand2 = stack.pop()
operand1 = stack.pop()
if operator == '&':
stack.append(operand1 and operand2)
elif operator == '|':
stack.append(operand1 or operand2)
elif char in variables:
if char in values:
stack.append(values[char])
else:
return None
elif char == '~':
if stack and stack[-1] == '~':
stack.pop()
if stack and stack[-1] == '(':
return None
else:
stack.append('~')
elif char in ['&', '|']:
stack.append(char)
if len(stack) == 1 and type(stack[0]) == bool:
return stack[0]
else:
return None
Java代码
public static String evaluateFormula(String str, char[] variableValues) {
String evaluated = "";
for (char c : str.toCharArray()) {
if (Character.isAlphabetic(c)) {
evaluated += variableValues[c - 'a'];
} else if (c == '&') {
int index = evaluated.length() - 1;
char op1 = evaluated.charAt(index - 1);
char op2 = evaluated.charAt(index);
evaluated = evaluated.substring(0, index - 1) + (op1 == 'T' && op2 == 'T' ? 'T' : 'F');
} else if (c == '|') {
int index = evaluated.length() - 1;
char op1 = evaluated.charAt(index - 1);
char op2 = evaluated.charAt(index);
evaluated = evaluated.substring(0, index - 1) + (op1 == 'T' || op2 == 'T' ? 'T' : 'F');
} else if (c == '~') {
int index = evaluated.length() - 1;
char op = evaluated.charAt(index);
evaluated = evaluated.substring(0, index - 1) + (op == 'T' ? 'F' : 'T');
}
}
return evaluated;
}
2条答案
按热度按时间w8f9ii691#
如果公式格式不正确或缺少括号,则可能发生“索引越界”错误。要修复错误并确保代码正确处理边界,可以按如下方式修改代码:
python代码修复了边界问题:
java代码:
保存为:FormulaEvaluator.java
qvsjd97n2#
使用 char 值 0 和 1 来表示 bool 值。
这里是一个优化的版本,用于重用变量。