2012-12-17 81 views
0

我是JavaScript的初學者。JavaScript。插入Postfix

此代碼應該評估後綴表達式。 但它不起作用。我認爲代碼非常合乎邏輯,我不知道它有什麼問題。

如果有人能幫助我,我將不勝感激!

<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

你知道哪個部件出問題了嗎? – Wiseguy

回答

3

有一些錯誤:

  1. 你的第一個條件應該由and&&)運營商,而不是or因爲你使用的負狀態

  2. 分開
  3. 由於您將字符串轉換爲數字,不要忘記將字符轉換爲整數(類似於+postArr[i]

  4. 你應該推送結果而不是帶註釋的字符串(stack.push(result)而不是stack.push("result = " + result))。

看到此jsfiddle:http://jsfiddle.net/scaillerie/GwDTM/2/

+0

@Shlomi Fish,有這種情況: if((postArr [i]!=「^」)||(postArr [i]!=「+」)||(postArr [i]!=「 - 」) ||(postArr [i]!=「*」)|| postArr [i]!=「/」)) ,我不想讓任何操作員進入循環,所以我希望元素進入一個號碼。 如果您發現任何其他錯誤,請通知我。 – user1910524

+0

我理解1號和3號,但我不太理解2號。請你澄清一下嗎? – user1910524

+0

@bfavaretto:對不起是......我更新了我的帖子。 @ user1910524:對於第2點,如果你保留'postArr [i]',你將會推動字符,當你做一些加法時,你會添加一個串聯(''1'+'2'='12' '而你想'1 + 2 = 3')。 –

1

我不知道這是否是唯一的問題,但條件驗證碼:

if((postArr[i]!="^")||(postArr[i]!= "+")||(postArr[i]!= "-")|| (postArr[i]!= "*")|| postArr[i]!= "/"))

將始終evaulate爲true,因爲postArr [I]總是是一個選項。你可能想是這樣的:

var ch = postArr[i];

if (! ((ch == "^") || (ch == "+") || (ch == "-")…