2

基本的な機能 (+ - * /) を持つ 1 行の計算機を作成しています。私は以前にこれを行ったことがありますが、今では間違った答えが返ってきて、間違いを見つけることができません。これが私のコードです:

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;
    }
}

このコードはすべて、calculate という関数内にあります。関数はボタンによってトリガーされ、シーケンスは入力から取得されます。

4

3 に答える 3

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;
    }
}
于 2013-05-06T19:34:40.763 に答える