该程序应该读取字符串输入的值并返回结果。
然而,当我使用
时System.out.println(Arrays.toString(stack.toArray()));
在最后检查堆栈的样子,或者甚至在程序期间,我注意到堆栈中的pop()方法似乎没有删除它返回的元素。
我可能正在做一些可怕的错误,但我无法弄明白。
我真的很感激任何见解!
// Test example : (((1+1)+1)+1)
import java.util.*;
public class Task2
{
public static void main(String[] args) //run Start() method
{
System.out.print("Enter an expression, or press Enter to quit: ");
Stack<String> stack = new Stack<String>();
Scanner scanner = new Scanner(System.in);
String n = scanner.nextLine();
if(!n.isEmpty())
{
for(int i = 0 ; i < n.length() ; i++)
{
if(!(n.charAt(i) == ')'))
{
stack.push(n.charAt(i) + "");
}
else
{
int two = Integer.parseInt(stack.pop());
char op = (stack.pop()).charAt(0);
int one = Integer.parseInt(stack.pop());
switch(op)
{
case '+':{stack.push((one + two) + "");}
case '-':{stack.push((one - two) + "");}
case '*':{stack.push((one * two) + "");}
case '/':{stack.push((one / two) + "");}
}
}
}
}
else
{
System.out.print("\ngoodbye");
System.exit(0);
}
}
}
很抱歉缺少评论,谢谢!
答案 0 :(得分:3)
这是我的第一个解决方案,所以要温柔:D。问题不在于pop(),因为pop正在做它应该做的事情。您忘记在switch语句中添加断点。它完成了每一个操作,并将它添加到堆栈中,给人一种流行音乐无效的错觉。我会把打印部分留给你。欢呼声。
switch(op)
{
case '+':
stack.push((one + two) + "");
break;
case '-':
stack.push((one - two) + "");
break;
case '*':
stack.push((one * two) + "");
break;
case '/':
stack.push((one / two) + "");
break;
}