2013-05-06 39 views
1

我正在寫一個單行計算器,它具有基本功能(+ - * /)。我之前做過這些,但現在我一直在收到錯誤的答案,而且我找不到我的錯誤。這裏是我的代碼:JS計算器問題。錯誤的答案

var seq = document.getElementById('sequence').value; 
var allNums = []; 
var i = 0, allSigns = []; 
var currentNums = ""; 

for (i = 0; i< seq.length; i++) 
{ 
    if (seq[i] != "+" && seq[i] != "-" && seq[i] != "*" && seq[i] != "/") 
    { 
     currentNums+=seq[i]; 
    } 
    else 
    { 
     allNums.push(Number(currentNums)); 
     currentNums=""; 
     allSigns.push(seq[i]); 
    } 
} 
allNums.push(Number(currentNums)); 
var result = 0; 
for (i = 0; i < allNums.length; i++) 
{ 
    if (allSigns[i] == '+') 
     result+=Number(allNums[i]); 
    else if (allSigns[i] == "-") 
     result-=Number(allNums[i]); 
    else if (allSigns[i] == "*") 
     result*=Number(allNums[i]); 
    else if (allSigns[i] == "/") 
     result/=parseInt(allNums[i]); 
    else 
    { 
     alert("The result is: " + result); 
     break; 
    } 
} 

所有這些代碼是在一個函數,稱爲計算。 func由一個按鈕觸發,並且該序列來自一個輸入。

+0

他們之一怎麼使用parseInt和其他數字? – epascarello 2013-05-06 19:24:42

+3

你會得到什麼樣的錯誤?你可以發佈一個jsFiddle嗎? – j08691 2013-05-06 19:24:56

+0

只是爲了嘗試如果問題來自那裏。如果全部使用Number()或parseInt(),則沒有區別。那麼沒有實際的錯誤,只有答案是錯誤的。 – 2013-05-06 19:26:04

回答

0

http://jsbin.com/obasix/3/edit

有沒有那麼多的跡象數字。因此,如果有2個數字和1個符號,它會計算5 +然後結束。

你應該從結果開始帶上第一個數字。

然後迭代剩下的數字並進行相應的計算。

var seq = "5+4"; 
var allNums = []; 
var i = 0, allSigns = []; 
var currentNums = ""; 

for (i = 0; i< seq.length; i++) 
{ 
    if (seq[i] != "+" && seq[i] != "-" && seq[i] != "*" && seq[i] != "/") 
    { 
     currentNums+=seq[i]; 
    } 
    else 
    { 
     allNums.push(Number(currentNums)); 
     currentNums=""; 
     allSigns.push(seq[i]); 
    } 
} 
allNums.push(Number(currentNums)); 

var result = allNums[0]; 
for (i = 1; i <= allNums.length; i++) 
{ 
    if (allSigns[i-1] == '+') 
     result+=Number(allNums[i]); 
    else if (allSigns[i-1] == "-") 
     result-=Number(allNums[i]); 
    else if (allSigns[i-1] == "*") 
     result*=Number(allNums[i]); 
    else if (allSigns[i-1] == "/") 
     result/=parseInt(allNums[i]); 
    else 
    { 
     alert("The result is: " + result); 
     break; 
    } 
} 
+0

非常感謝你的工作。用你的代碼和解釋和@ jmeas的一個我明白我做錯了什麼。謝謝。 – 2013-05-06 19:45:04

1

雖然這個簡單的計算器有許多缺點,可能會或可能不會成爲問題(取決於您想要做什麼),但一個問題是您的allSigns數組值不與正確的allNums關聯數組值。

看看this example。在控制檯中,您可以看到與6關聯的符號是加號,而與2關聯的運算符未定義。當然,這不是我們想要的。我們想要的是將這兩個添加到六個。

此問題的解決方案始終將allNums[0]添加到result從一開始。這設定了我們的結果,以便接下來的任何操作。在這種情況下,我們從6開始。

接下來我們需要做的是一個移動的allSigns下來每個值的位置,後的價值排隊操作它,之前。所以,在上面的例子中,我們有+2相關聯,所以它會將這兩個添加到六個。

This JSFiddle顯示此特定情況的修復程序。

+0

感謝您的解釋人。我明白我的錯誤在哪裏。 – 2013-05-06 19:46:10