2

「方程式計算機」に取り組んでいますが、いくつか問題があります。これで方程式を挿入できますが、数値だけでなく、数値にする必要があります。すべての「+」、「-」、「*」、「/」を正しいことである。

これが今までの私のコードです:


var ligning = prompt("Insert your equation here:");
var newLigning = ligning.split("=");
var sideOne = parseInt(newLigning[0],10);
var sideTwo = parseInt(newLigning[1],10);
var calculator = function() {

};
alert(sideOne);
alert(sideTwo);

ここで非常に具体的に例を示します。

'1 + 2 = 3'は3を警告し、次に3を再度警告する必要があります(下部に2つの警告があるため)-どうすればそれを行うことができますか?

4

3 に答える 3

1

それ以外の :

var sideOne = parseInt(newLigning[0],10);

あなたはある種のものを持ちたいかもしれません:

var sideOne = performMath(newLining[0],10);

どこ :

function performMath(equation) {
    //CODE HERE
}

performMathいくつかの方法で行うことができます。方程式を分割し、2の間の数値と方程式を取得する必要があります。これは再帰的に実行できます。

これは良い出発点になると思います。

編集

質問に答える必要はありませんが、操作優先度(PEDMAS)を考慮に入れ始めると、これは少し難しい作業になります。アプローチは同じですが、performMathもう少し複雑にする必要があります。このような場合、数値にはある種の配列構造を、方程式には別の配列構造をお勧めします。

編集2

Paul Sまた、始める前に弦を消毒することの良い点を作りました。誰かが方程式を入力するとは限りません。リッチクックをプログラミングするとき、次のように述べています。

「今日のプログラミングは、より大きく、より優れたフールプルーフプログラムを構築しようと努力しているソフトウェアエンジニアと、より大きく、より優れた馬鹿を生み出そうとしている宇宙との間の競争です。これまでのところ、宇宙は勝利を収めています。」

編集3

この小さなコードスニペットは多少役立つはずです...どうしてもこれは最も効率的なコードではないかもしれません...

var equation = "1+22-3";
var operators = "+-*\/"

var currentNumber = "";
var numbers = new Array();
var operatorArray = new Array();
for(var i=0; i<equation.length; i++) {
  var currentChar = equation.charAt(i);
  if(operators.indexOf(currentChar) != -1) {
    operatorArray[operatorArray.length] = (currentChar);
    numbers[numbers.length] = (currentNumber);
    currentNumber = "";
  } else {
    currentNumber = currentNumber + currentChar;
    alert(currentNumber);
  }
}
numbers[numbers.length] = currentNumber;
alert("numbers : " + numbers);
alert("operators : " + operatorArray);

今、あなたがしなければならないのは、配列を調べて適切な操作を実行することだけです。

于 2013-01-09T18:46:09.480 に答える
1

evalは非常に悪質で悪用されやすいですが、数字と特定の演算子しか使用できないことがわかっている場合は、文字列のサニタイズを行って、少し安全にすることもできます。

var ligning = prompt("Insert your equation here:"),
    newLigning = ligning.split("="),
    lhs = newLigning[0],
    rhs = newLigning[1];

function calculate(expr) {
    var s;
    expr = expr.replace(/[^\d*/()+-]/g, ''); // remove everything except permitted
    if (expr !== (s = expr.replace(/^[*/]*|[*/+-]*$/g, ''))) {
        expr = s; // don't allow * or / at the ends
        console.warn('Removing invalid operators');
    };
    return +eval(expr || 0); // + implicit converts to number
};

console.log(lhs = calculate(lhs), rhs = calculate(rhs), lhs === rhs);
于 2013-01-09T18:50:43.980 に答える
0
alert ( eval(newLigning[0]) );
alert ( eval(newLigning[1]) );
于 2013-01-09T18:45:02.460 に答える