まず、JavaScriptでコードを書くのは久しぶりで、かつ、プログラミング自体が皆さんより経験が浅いのでご理解ください。
さて、具体的に申しますと、例えば「13*4+567/32-44」というような式がフォームから得られたとして、その式を左から順に計算していくプログラムを考えます。無論、乗除が先に計算されるように、最初は+-を無視して、乗除がなくなれば和差を考えます。そして最終的に式が計算された答えをアラートで表示するというものです。
現在の問題点は、なぜか式がそのまま答えとして出てきます。また、上記の通りなので、気づいてない問題が他にもあるかもしれません。
自分で書いたコードなのですが、恥ずかしながら混乱しております。ご協力よろしくお願いします。
<コード>
<!DOCTYPE HTML>
<html>
<head>
<title>万能電卓</title>
<script>
/*順番方式*/
function keisan() { //a
/*try{*/
var chk1 = 0
var str = document.siki.mainsiki.value;
var strlong = str.length;
for (var cnt = 0; cnt < 10; cnt++) { //b
if (str.indexOf(cnt, 0) != 0) { //c
chk1++
} //c
} //b
if (chk1 > 9) { //d
alert("最初の文字は数字にしてください");
return;
} //d
var siki = str;
var sikilong = siki.length; //0-x + 1
var sisoku = new Array();
sisoku[0] = '+';
sisoku[1] = '-';
sisoku[2] = '*';
sisoku[3] = '/';
var sisokunum = 0;
var sisokunochk = 0;
for (var cntstrnum = 0; cntstrnum < sikilong; cntstrnum++) { //e
var chk = siki.charAt(cntstrnum);
for (var cnta = 0; cnta < 4; cnta++) { //f
if (chk == sisoku[cnta]) { //g
sisokunum = sisokunum + 1;
} //g
} //f
} //e
if (sisokunum == 0) { //h
alert("答え:" + siki);
return;
} //h
loop:
for (var cntmain = 0; cntmain < 1; cntmain++) { //i////gotoの代わり
var sikip = "";
if (sisokunochk != 0) {
break loop;
}
subloop:
for (var cntb = 0; cntb < sikilong; cntb++) { //j
var counter = 0;
var countertwo = 0;
var sikipa = "";
var sikipb = "";
var sikisisoku = "";
var sikiright = "";
for (var cntz = 0; cntz < 4; cntz++) { //k
if (sisoku[cntz] == siki.charAt(cntb)) { //l
counter = 1;
} //l
} //k
if (counter == 0) { //m
sikip = sikip + siki.charAt(cntb); //sikipはsikiの計算する部分の記録用
if (cntb == sikilong - 1) { //n
sikipb = sikip;
} //n
} else if (counter == 1) { //m
for (var cnty = 2; cnty < 4; cnty++) { //o
if (sisoku[cnty] == siki.charAt(cntb)) { //p
if (sikipa == "") { //q
sikipa = sikip;
sikip = "";
} else { //q
sikipb = sikip;
sikiright = siki.substr(cntb + 1, sikilong - 1); //怪しい
} //q
sikisisoku = siki.charAt(cntb);
break;
} //p
} //o
} //m
for (var cntx = 0; cntx < 2; cntx++) { //r
if (sisoku[cntx] == siki.charAt(cntb) && twosisoku == 0) { //s//twosisokuは*/の数
sikipa = sikip
sikip = "";
sikisisoku = siki.charAt(cntb);
} else if (sisoku[cntx] == siki.charAt(cntb) && twosisoku > 0) { //s
sikip = "";
} //s
} //r
if (sikisisoku != "" && sikipa != "" && sikipb != "") { //s
if (sikisisoku == sisoku[0]) { //t
sikileft = sikipa + sikipb;
siki = sikileft.toString() + sikiright.toString(); //以下共通
} else if (sikisisoku == sisoku[1]) { //t
sikileft = sikipa - sikipb;
siki = sikileft.toString() + sikiright.toString();
} else if (sikisisoku == sisoku[2]) { //t
sikileft = sikipa * sikipb;
siki = sikileft.toString() + sikiright.toString();
} else if (sikisisoku == sisoku[3]) { //t
sikileft = sikipa / sikipb;
siki = sikileft.toString() + sikiright.toString();
} //t
} //s
sikilong = siki.length; //計算後を想定した記述
sisokunochk = 0;
for (var cntc = 0; cntc < sikilong; cntc++) { //t
var chka = siki.charAt(cntc);
for (var cntd = 0; cntd < 4; cntd++) { //u
if (chka == sisoku[cntd]) { //v
sisokunochk = sisokunochk + 1;
} //v
} //u
} //t
if (sisokunochk == 0) { //w
break; //もう四則演算子がない
} //w
if (sisokunochk != 0) { //x
break subloop; //まだ四則演算子がある
} //x
} //j
alert("答え:" + siki);
return;
} //i
/*}catch(e){
alert("式が不適合もしくはエラーです。");
return;
}
finally{
return;
}*/
} //a
</script>
</head>
<body>
<form name="siki">
式:<input type="text" name="mainsiki" value="">
<br>
<input type="button" value="計算" onclick="keisan()">
</form>
</body>
</html>