我是JavaScript的初学者。
此代码应该用于评估后缀表达式。 但它不起作用。我认为代码非常符合逻辑,我真的不知道它有什么问题。
如果有人可以帮助我,我将不胜感激!
<html>
<head>
</head>
<body>
<!-- starting javaScript -->
<script type = "text/javascript">
var postStr = "123++"; //initial postfix expression
var postArr = new Array();
postArr = postStr.split(""); //string.split() turns string into array!
for(var i=0; i<postArr.length; i++)
document.write("value"+postArr[i]+"<br>");
var stack=[];
var result;
var firstNum;
var secNum;
//var k;
for(var i=0; i<postArr.length; i++)
{
if((postArr[i]!="^")||(postArr[i]!= "+")||(postArr[i]!= "-")|| (postArr[i]!= "*")||(postArr[i]!= "/"))
{
stack.push(postArr[i]);
//document.write("length" + stack.length);
}
else if((postArr[i]=="^")||(postArr[i]== "+")||(postArr[i]== "-")||(postArr[i]== "*")||(postArr[i]== "/"))
{
if(postArr[i]=='+')
{
firstNum=stack.pop();
secNum=stack.pop();
result = secNum + firstNum;
stack.push("result = " + result);
}
else if(postArr[i]=='*')
{
firstNum=stack.pop();
secNum=stack.pop();
result = secNum * firstNum;
stack.push("result = " + result);
}
else if(postArr[i]=='/')
{
firstNum=stack.pop();
secNum=stack.pop();
result = secNum / firstNum;
stack.push("result = " + result);
}
else if(postArr[i]=='-')
{
firstNum=stack.pop();
secNum=stack.pop();
result = secNum - firstNum;
stack.push("result = " + result);
}
}
}
var finalRes=stack.pop();
document.write(finalRes);
</script>
</body>
</html>
答案 0 :(得分:3)
有一些错误:
您的第一个条件应由and
(&&
)运算符而不是or
分隔,因为您使用了否定条件
因为您将字符串转换为数字所以不要忘记将字符转换为整数(类似+postArr[i]
)
您应该推送结果,而不是带有评论的字符串(stack.push(result)
而不是stack.push("result = " + result)
)。
请参阅此jsfiddle:http://jsfiddle.net/scaillerie/GwDTM/2/。
答案 1 :(得分:1)
我不确定这是否是唯一的问题,但是这个代码的条件是:
if((postArr[i]!="^")||(postArr[i]!= "+")||(postArr[i]!= "-")|| (postArr[i]!= "*")|| postArr[i]!= "/"))
总是会变为真,因为postArr [i]总是不是其中一个选项。你可能想要这样的东西:
var ch = postArr[i];
if (! ((ch == "^") || (ch == "+") || (ch == "-")…