Javascript 由于For循环,文本框计算器无法正常工作
我正在创建一个基于文本的计算器,因此它必须遵循PEMDAS的规则,我已经完成了大部分工作,但我注意到了一些有关它的内容 “3x4/6/6”就是一个例子。所以它所做的是((3x4)/(6/6))一个较长的例子是“1+2+3+4+5+6+7+8”,它所做的是((1+2)+(3+4))+((5+6)+(7+8)),它得到的答案是相同的,它不是从左到右做的 所以它会做其他的操作。我知道它是混乱的,因为for循环,但我不知道从哪里开始修复它 但我需要的是一种方法,它总是对第一个乘法或除法符号进行运算,尽管我不知道怎么做 目前我的代码是:Javascript 由于For循环,文本框计算器无法正常工作,javascript,Javascript,我正在创建一个基于文本的计算器,因此它必须遵循PEMDAS的规则,我已经完成了大部分工作,但我注意到了一些有关它的内容 “3x4/6/6”就是一个例子。所以它所做的是((3x4)/(6/6))一个较长的例子是“1+2+3+4+5+6+7+8”,它所做的是((1+2)+(3+4))+((5+6)+(7+8)),它得到的答案是相同的,它不是从左到右做的 所以它会做其他的操作。我知道它是混乱的,因为for循环,但我不知道从哪里开始修复它 但我需要的是一种方法,它总是对第一个乘法或除法符号进行运算,尽管
for (i = 0; i < OO.length; i++) {
o = OO[i]
if (e[OO[i]] === "*") {
console.log(e)
result = e[o - 1] * e[o + 1]
e.splice(o - 1, 3, result)
}
if (e[OO[i]] === "/") {
console.log(e)
result = e[o - 1] / e[o + 1]
e.splice(o - 1, 3, result)
}
}
}
for(i=0;i
e=等式,OO等于操作顺序或所有操作都是
因此,如果方程是上面的例子,它将每隔一段时间标记一次,因为符号的位置是[1,3,5]。代码是
const s1 = SE,
calcN = str => str.split(/(\+|\-|\(|\)|\*|\x|\/|\^)/).map(x => isNaN(x) ? x : Number(x));
var Equation = calcN(s1)
function CFO(e) {
for (i = 0; i < e.length; i++) {
if (e[i] === "^") {
OO.push(i)
}
if (e[i] === "*" || e[i] === "x" || e[i] === "/") {
OO.push(i)
}
if (e[i] === "+" || e[i] === "-") {
OO.push(i)
}
}
}
const s1=SE,
calcN=str=>str.split(/(\+\-\(\\\)\*\*\x\/\^)/).map(x=>isNaN(x)?x:Number(x));
var方程=calcN(s1)
职能首席财务官(e){
对于(i=0;i
我有这样的程序,所以它按顺序排列,从技术上讲,因为乘法和除法是同时进行的,所以我同时排列它们
所以我需要修正的是,它不是做其他的每一个操作,而是先做一个,然后再做一个,然后再做下一个
这是我的全部代码:
function calc() {
var SE = document.getElementById("EQ").value
var OO = [] //Operations Order
var o, x, y, result;
const s1 = SE,
calcN = str => str.split(/(\+|\-|\(|\)|\*|\x|\/|\^)/).map(x => isNaN(x) ? x : Number(x));
var Equation = calcN(s1)
function CFO(e) {
for (i = 0; i < e.length; i++) {
if (e[i] === "^") {
OO.push(i)
}
if (e[i] === "*" || e[i] === "x" || e[i] === "/") {
OO.push(i)
}
if (e[i] === "+" || e[i] === "-") {
OO.push(i)
}
}
}
function Calc(e) {
CFO(e)
if (e.indexOf('(')>-1) {
var PE = e.slice(e.indexOf('(') + 1, e.indexOf(')'))
console.log(PE+" Parenthesis")
console.log(e)
Calc(PE)
e.splice(e.indexOf('(') - 1, e.indexOf(')')+2,PE[0])
}
for (j = 0; j < e.length; j++) {
for (i = 0; i < OO.length; i++) {
o = OO[i]
if (e[OO[i]] === "^") {
console.log(e)
result = Math.pow(e[o - 1], e[o + 1])
e.splice(o - 1, 3, result)
}
}
} //Exponent
for (j = 0; j < e.length; j++) {
for (i = 0; i < OO.length; i++) {
o = OO[i]
if (e[OO[i]] === "*") {
console.log(e)
result = e[o - 1] * e[o + 1]
e.splice(o - 1, 3, result)
}
if (e[OO[i]] === "/") {
console.log(e)
result = e[o - 1] / e[o + 1]
e.splice(o - 1, 3, result)
}
}
} //Multiply and Divide
for (j = 0; j < e.length; j++)
for (i = 0; i < OO.length; i++) {
o = OO[i]
if (e[o] === "-") {
console.log(e)
result = e[o - 1] + -(e[o + 1])
e.splice(o - 1, 3, result)
}
if (e[o] === "+") {
console.log(e)
result = e[o - 1] + e[o + 1]
e.splice(o - 1, 3, result)
}
}
} //Add and Subtract
Calc(Equation)
console.log(Equation)
}
函数计算(){
var SE=document.getElementById(“EQ”).value
var OO=[]//操作顺序
变量o,x,y,结果;
常数s1=SE,
calcN=str=>str.split(/(\+\-\(\\\)\*\*\x\/\^)/).map(x=>isNaN(x)?x:Number(x));
var方程=calcN(s1)
职能首席财务官(e){
对于(i=0;i-1){
var PE=e.slice(e.indexOf('(')+1,e.indexOf(')'))
console.log(PE+“括号”)
控制台日志(e)
计算(PE)
e、 拼接(e.indexOf('(')-1,e.indexOf(')'))+2,PE[0])
}
对于(j=0;j