teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

13

levelrr == sikilong - 1の時にsikipb = ""になる記述を追加。

2017/01/06 01:34

投稿

ko20vonobird
ko20vonobird

スコア50

title CHANGED
File without changes
body CHANGED
@@ -124,6 +124,9 @@
124
124
  } //s
125
125
  b = siki.substring(levellr + 1, levelrr);
126
126
  sikipb = siki.substring(levelrr, sikilong - 1);
127
+ if (levelrr == sikilong - 1){
128
+ sikipb = "";
129
+ }
127
130
  if (siki.charAt(levelrl) == sisoku[2]) { //t
128
131
  en = a * b;
129
132
  } else if (siki.charAt(levelrl) == sisoku[3]) { //t

12

//tの上のlevelrr \+ 1をlevelrrに修正

2017/01/06 01:34

投稿

ko20vonobird
ko20vonobird

スコア50

title CHANGED
File without changes
body CHANGED
@@ -123,7 +123,7 @@
123
123
  levelrr = sikilong;
124
124
  } //s
125
125
  b = siki.substring(levellr + 1, levelrr);
126
- sikipb = siki.substring(levelrr + 1, sikilong - 1);
126
+ sikipb = siki.substring(levelrr, sikilong - 1);
127
127
  if (siki.charAt(levelrl) == sisoku[2]) { //t
128
128
  en = a * b;
129
129
  } else if (siki.charAt(levelrl) == sisoku[3]) { //t

11

//sの下のsikilongをsikilong - 1に修正

2017/01/06 01:25

投稿

ko20vonobird
ko20vonobird

スコア50

title CHANGED
File without changes
body CHANGED
@@ -123,7 +123,7 @@
123
123
  levelrr = sikilong;
124
124
  } //s
125
125
  b = siki.substring(levellr + 1, levelrr);
126
- sikipb = siki.substring(levelrr + 1, sikilong);
126
+ sikipb = siki.substring(levelrr + 1, sikilong - 1);
127
127
  if (siki.charAt(levelrl) == sisoku[2]) { //t
128
128
  en = a * b;
129
129
  } else if (siki.charAt(levelrl) == sisoku[3]) { //t

10

sikipaが""になる記述を追加

2017/01/06 01:20

投稿

ko20vonobird
ko20vonobird

スコア50

title CHANGED
File without changes
body CHANGED
@@ -129,6 +129,9 @@
129
129
  } else if (siki.charAt(levelrl) == sisoku[3]) { //t
130
130
  en = a / b;
131
131
  } //t
132
+ if (levelll == 0){
133
+ sikipa = "";
134
+ }
132
135
  siki = sikipa + en + sikipb;
133
136
  sikilong = siki.length;
134
137
  } //4

9

a = siki\.substring\(levelll, levelrl\);をa = siki\.substring\(levelll, levelrl - 1\);に修正

2017/01/06 01:17

投稿

ko20vonobird
ko20vonobird

スコア50

title CHANGED
File without changes
body CHANGED
@@ -101,7 +101,7 @@
101
101
  if (levelll == -1) { //n
102
102
  levelll = 0;
103
103
  } //n
104
- a = siki.substring(levelll, levelrl);
104
+ a = siki.substring(levelll, levelrl - 1);
105
105
  sikipa = siki.substring(0, levelll);
106
106
  var levellr = levelrl;
107
107
  var levelrr = -1;

8

//lの上のcntd\+1をcntdに修正

2017/01/06 01:12

投稿

ko20vonobird
ko20vonobird

スコア50

title CHANGED
File without changes
body CHANGED
@@ -90,7 +90,7 @@
90
90
  } //j
91
91
  for (var cntnumb = 0; cntnumb < 4; cntnumb++) { //k
92
92
  if (siki.charAt(cntd) == sisoku[cntnumb]) { //l
93
- var levelll = cntd + 1;
93
+ var levelll = cntd;
94
94
  break;
95
95
  } //l
96
96
  if (levelll != -1) { //m

7

×÷のところで抜けていた×÷が無いときにbreakする記述を追加。

2017/01/06 01:09

投稿

ko20vonobird
ko20vonobird

スコア50

title CHANGED
File without changes
body CHANGED
@@ -69,6 +69,9 @@
69
69
  } //7
70
70
  } //6
71
71
  } //5
72
+ if (kakerupo == -1 && warupo == -1) {
73
+ break;
74
+ }
72
75
  if (kakerupo != -1 && warupo != -1) { //8
73
76
  if (kakerupo > warupo) { //9
74
77
  var levelrl = kakerupo;

6

説明の修正および新たな問題の記述

2017/01/06 00:59

投稿

ko20vonobird
ko20vonobird

スコア50

title CHANGED
File without changes
body CHANGED
@@ -8,6 +8,7 @@
8
8
 
9
9
  ```
10
10
  乗除計算では値が不自然なものに、和と差の計算では結果に"NaN"が含まれかつ式も右にそのまま出てきます。
11
+ 三項以上の掛け算でNaNが出現します。
11
12
  ```
12
13
 
13
14
  ###該当のソースコード
@@ -195,7 +196,6 @@
195
196
  ###試したこと
196
197
  コードを見たらわかるかと思いますが、括弧がちゃんと対応しているか英数字をふって確かめたりしました。
197
198
  デバッグも粗方行いました。
198
- ※掛け算に関して問題が無くなりました。
199
199
 
200
200
  ###補足情報(言語/FW/ツール等のバージョンなど)
201
201
  特になし

5

//sの下の\(levellr\+1を\(levelrr\+1に修正

2017/01/05 15:45

投稿

ko20vonobird
ko20vonobird

スコア50

title CHANGED
File without changes
body CHANGED
@@ -119,7 +119,7 @@
119
119
  levelrr = sikilong;
120
120
  } //s
121
121
  b = siki.substring(levellr + 1, levelrr);
122
- sikipb = siki.substring(levellr + 1, sikilong);
122
+ sikipb = siki.substring(levelrr + 1, sikilong);
123
123
  if (siki.charAt(levelrl) == sisoku[2]) { //t
124
124
  en = a * b;
125
125
  } else if (siki.charAt(levelrl) == sisoku[3]) { //t
@@ -194,6 +194,8 @@
194
194
 
195
195
  ###試したこと
196
196
  コードを見たらわかるかと思いますが、括弧がちゃんと対応しているか英数字をふって確かめたりしました。
197
+ デバッグも粗方行いました。
198
+ ※掛け算に関して問題が無くなりました。
197
199
 
198
200
  ###補足情報(言語/FW/ツール等のバージョンなど)
199
201
  特になし

4

説明の改善

2017/01/05 15:42

投稿

ko20vonobird
ko20vonobird

スコア50

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,7 @@
1
1
  ###前提・実現したいこと
2
2
  ```
3
3
  HTMLのフォームから「式」を取得し、四則演算記号を判別して演算の順番通りに計算をこなしていくということを実現したいです。
4
- 仕組みとしては、四則演算子を一つずつ潰していく感じになります。
4
+ 仕組みとしては、四則演算子を一つずつ潰していく感じになります。今対応させるのは自然数のみです。
5
5
  最終的に結果が全て計算されたものになるようなプログラムを目指しています。
6
6
  ```
7
7
  ###発生している問題・エラーメッセージ

3

//4の少し上のlevelrlをsiki\.charAt\(levelrl\)に修正

2017/01/05 15:27

投稿

ko20vonobird
ko20vonobird

スコア50

title CHANGED
File without changes
body CHANGED
@@ -120,9 +120,9 @@
120
120
  } //s
121
121
  b = siki.substring(levellr + 1, levelrr);
122
122
  sikipb = siki.substring(levellr + 1, sikilong);
123
- if (levelrl == sisoku[2]) { //t
123
+ if (siki.charAt(levelrl) == sisoku[2]) { //t
124
124
  en = a * b;
125
- } else if (levelrl == sisoku[3]) { //t
125
+ } else if (siki.charAt(levelrl) == sisoku[3]) { //t
126
126
  en = a / b;
127
127
  } //t
128
128
  siki = sikipa + en + sikipb;

2

=が抜けていたところを修正

2017/01/05 15:26

投稿

ko20vonobird
ko20vonobird

スコア50

title CHANGED
File without changes
body CHANGED
@@ -120,7 +120,7 @@
120
120
  } //s
121
121
  b = siki.substring(levellr + 1, levelrr);
122
122
  sikipb = siki.substring(levellr + 1, sikilong);
123
- if (levelrl = sisoku[2]) { //t
123
+ if (levelrl == sisoku[2]) { //t
124
124
  en = a * b;
125
125
  } else if (levelrl == sisoku[3]) { //t
126
126
  en = a / b;
@@ -149,7 +149,7 @@
149
149
  break;
150
150
  } //5
151
151
  } //3
152
- if (middle = -1) {
152
+ if (middle == -1) {
153
153
  break;
154
154
  }
155
155
  var lrright = -1;
@@ -171,7 +171,7 @@
171
171
  var b = siki.substring(lrleft, lrright);
172
172
  if (siki.charAt(middle) == sisoku[0]) {
173
173
  en = a + b;
174
- } else if (siki.charAt(middle) = sisoku[1]) {
174
+ } else if (siki.charAt(middle) == sisoku[1]) {
175
175
  en = a - b;
176
176
  }
177
177
  var sikipb = substring(lrright, sikilong);

1

編集・追記依頼に基づき、整形しました。

2017/01/05 15:13

投稿

ko20vonobird
ko20vonobird

スコア50

title CHANGED
File without changes
body CHANGED
@@ -12,184 +12,184 @@
12
12
 
13
13
  ###該当のソースコード
14
14
  ```JavaScript
15
- function keisan() {//a
16
- /*try{*/
17
- var chk1 = 0
18
- var str = document.siki.mainsiki.value;
19
- var strlong = str.length;
20
- for (var cnt=0 ; cnt<10 ; cnt++){//b
21
- if (str.indexOf(cnt,0) != 0){//c
22
- chk1++
23
- }//c
24
- }//b
25
- if (chk1>9){//d
26
- alert("最初の文字は数字にしてください");
27
- return;
28
- }//d
29
- var siki = str;
30
- var sikilong = siki.length;
31
- var sisoku = new Array();
32
- sisoku[0] = '+';
33
- sisoku[1] = '-';
34
- sisoku[2] = '*';
35
- sisoku[3] = '/';
36
- var sisokunum = 0;
37
- for (var cntstrnum=0 ; cntstrnum<sikilong ; cntstrnum++){//e
38
- var chk = siki.charAt(cntstrnum);
39
- for (var cnta = 0 ; cnta<4 ; cnta++){//f
40
- if (chk == sisoku[cnta]){//g
41
- sisokunum = sisokunum + 1;
42
- }//g
43
- }//f
44
- }//e
45
- if (sisokunum == 0){//h
46
- alert("答え:" + siki);
47
- return;
48
- }//h
49
- //×÷の計算
50
- var nisokukw = 0;
51
- for (var cntnuma=0 ; cntnuma<sikilong; cntnuma++){//1
52
- var chk = siki.charAt(cntnuma);
53
- for (var cntb=2 ; cntb<4 ; cntb++){//2
54
- if (chk == sisoku[cntb]){//3
55
- nisokukw = nisokukw + 1;
56
- }//3
57
- }//2
58
- }//1
59
- var kakerupo = -1;
60
- var warupo = -1;
61
- for (var cntmaina=0 ; cntmaina<=nisokukw ; cntmaina++){//4
62
- for (var cntc=2 ; cntc<4 ; cntc++){//5
63
- if (siki.indexOf(sisoku[cntc]) != -1){//6
64
- if (cntc == 2){//7
65
- kakerupo = siki.indexOf(sisoku[cntc]);
66
- }else if (cntc == 3){//7
67
- warupo = siki.indexOf(sisoku[cntc]);
68
- }//7
69
- }//6
70
- }//5
71
- if (kakerupo != -1 && warupo != -1){//8
72
- if (kakerupo > warupo){//9
73
- var levelrl = kakerupo;
74
- }else{//9
75
- var levelrl = warupo;
76
- }//9
77
- }else if (kakerupo != -1){//8
78
- var levelrl = kakerupo;
79
- }else if (warupo != -1){//8
80
- var levelrl = warupo;
81
- }//8
82
- var levelll = -1;
83
- for (var cntd=levelrl-1 ; cntd>=0 ; cntd--){//i
84
- if (levelll != -1){//j
85
- break;
86
- }//j
87
- for (var cntnumb=0 ; cntnumb<4 ; cntnumb++){//k
88
- if (siki.charAt(cntd) == sisoku[cntnumb]){//l
89
- var levelll = cntd + 1;
90
- break;
91
- }//l
92
- if (levelll != -1){//m
93
- break;
94
- }//m
95
- }//k
96
- }//i
97
- if (levelll == -1){//n
98
- levelll = 0;
99
- }//n
100
- a = siki.substring(levelll,levelrl);
101
- sikipa = siki.substring(0,levelll);
102
- var levellr = levelrl;
103
- var levelrr = -1;
104
- for (var cnte=levellr+1 ; cnte<sikilong ; cnte++){//o
105
- for (var cntnumc=0 ; cntnumc<4 ; cntnumc++){//p
106
- if (siki.charAt(cnte) == sisoku[cntnumc]){//q
107
- levelrr = siki.charAt(cnte);
108
- break;
109
- }//q
110
- if (levelrr != -1){//r
111
- break;
112
- }//r
113
- }//p
114
- if (levelrr != -1){///u
115
- break;
116
- }///u
117
- }//o
118
- if (levelrr == -1){//s
119
- levelrr = sikilong;
120
- }//s
121
- b = siki.substring(levellr+1,levelrr);
122
- sikipb = siki.substring(levellr+1,sikilong);
123
- if (levelrl = sisoku[2]){//t
124
- en = a * b;
125
- }else if (levelrl == sisoku[3]){//t
126
- en = a / b;
127
- }//t
128
- siki = sikipa + en + sikipb;
129
- sikilong = siki.length;
130
- }//4
131
- //+-の計算
132
- var nisokuth = 0;
133
- for (var cntf=0 ; cntf<=sikilong ; cntf++){
134
- for (var cntnumd=0; cntnumd<4 ; cntnumd++){
135
- if (sisoku[cntnumd] == siki.charAt(cntf)){
136
- nisokuth++;
137
- }
138
- }
139
- }
140
- for (var cntmainb=0 ; cntmainb<=nisokuth; cntmainb++){//1
141
- var middle = -1;
142
- for (var cntg=0 ; cntg<sikilong ; cntg++){//2
143
- for (var cntnume=0 ; cntnume<2 ; cntnume++){//3
144
- if (sisoku[cntnume] == siki.charAt(cntg)){//4
145
- var middle = cntg;
146
- break;
147
- }//4
148
- if (middle != -1){//5
149
- break;
150
- }//5
151
- }//3
152
- if (middle = -1){
153
- break;
154
- }
155
- var lrright = -1;
156
- var llleft = 0;
157
- var llright = middle - 1;
158
- var lrleft = middle + 1;
159
- for (var cntaa = lrleft ; cntaa < sikilong - lrleft + 1 ; cntaa++){
160
- for (var cntnumaa = 0 ; cntnumaa < 2 ; cntnumaa++){
161
- if (sisoku[cntnumaa] == siki.charAt(cntaa)){
162
- lrright = cntaa - 1;
163
- break;
164
- }
165
- }
166
- if (lrright == -1){
167
- lrlight = sikilong;
168
- }
169
- }
170
- var a = siki.substring(llleft,llright);
171
- var b = siki.substring(lrleft,lrright);
172
- if (siki.charAt(middle) == sisoku[0]){
173
- en = a + b;
174
- }else if (siki.charAt(middle) = sisoku[1]){
175
- en = a - b;
176
- }
177
- var sikipb = substring(lrright,sikilong);
178
- siki = en + sikipb;
179
- }//2
180
- if (middle == -1){
181
- alert("答え:" + siki);
182
- return;
183
- }
184
- }//1
185
- /*}catch(e){
186
- alert("式が不適合もしくはエラーです。");
187
- return;
188
- }
189
- finally{
190
- return;
191
- }*/
192
- }//a
15
+ function keisan() { //a
16
+ /*try{*/
17
+ var chk1 = 0
18
+ var str = document.siki.mainsiki.value;
19
+ var strlong = str.length;
20
+ for (var cnt = 0; cnt < 10; cnt++) { //b
21
+ if (str.indexOf(cnt, 0) != 0) { //c
22
+ chk1++
23
+ } //c
24
+ } //b
25
+ if (chk1 > 9) { //d
26
+ alert("最初の文字は数字にしてください");
27
+ return;
28
+ } //d
29
+ var siki = str;
30
+ var sikilong = siki.length;
31
+ var sisoku = new Array();
32
+ sisoku[0] = '+';
33
+ sisoku[1] = '-';
34
+ sisoku[2] = '*';
35
+ sisoku[3] = '/';
36
+ var sisokunum = 0;
37
+ for (var cntstrnum = 0; cntstrnum < sikilong; cntstrnum++) { //e
38
+ var chk = siki.charAt(cntstrnum);
39
+ for (var cnta = 0; cnta < 4; cnta++) { //f
40
+ if (chk == sisoku[cnta]) { //g
41
+ sisokunum = sisokunum + 1;
42
+ } //g
43
+ } //f
44
+ } //e
45
+ if (sisokunum == 0) { //h
46
+ alert("答え:" + siki);
47
+ return;
48
+ } //h
49
+ //×÷の計算
50
+ var nisokukw = 0;
51
+ for (var cntnuma = 0; cntnuma < sikilong; cntnuma++) { //1
52
+ var chk = siki.charAt(cntnuma);
53
+ for (var cntb = 2; cntb < 4; cntb++) { //2
54
+ if (chk == sisoku[cntb]) { //3
55
+ nisokukw = nisokukw + 1;
56
+ } //3
57
+ } //2
58
+ } //1
59
+ var kakerupo = -1;
60
+ var warupo = -1;
61
+ for (var cntmaina = 0; cntmaina <= nisokukw; cntmaina++) { //4
62
+ for (var cntc = 2; cntc < 4; cntc++) { //5
63
+ if (siki.indexOf(sisoku[cntc]) != -1) { //6
64
+ if (cntc == 2) { //7
65
+ kakerupo = siki.indexOf(sisoku[cntc]);
66
+ } else if (cntc == 3) { //7
67
+ warupo = siki.indexOf(sisoku[cntc]);
68
+ } //7
69
+ } //6
70
+ } //5
71
+ if (kakerupo != -1 && warupo != -1) { //8
72
+ if (kakerupo > warupo) { //9
73
+ var levelrl = kakerupo;
74
+ } else { //9
75
+ var levelrl = warupo;
76
+ } //9
77
+ } else if (kakerupo != -1) { //8
78
+ var levelrl = kakerupo;
79
+ } else if (warupo != -1) { //8
80
+ var levelrl = warupo;
81
+ } //8
82
+ var levelll = -1;
83
+ for (var cntd = levelrl - 1; cntd >= 0; cntd--) { //i
84
+ if (levelll != -1) { //j
85
+ break;
86
+ } //j
87
+ for (var cntnumb = 0; cntnumb < 4; cntnumb++) { //k
88
+ if (siki.charAt(cntd) == sisoku[cntnumb]) { //l
89
+ var levelll = cntd + 1;
90
+ break;
91
+ } //l
92
+ if (levelll != -1) { //m
93
+ break;
94
+ } //m
95
+ } //k
96
+ } //i
97
+ if (levelll == -1) { //n
98
+ levelll = 0;
99
+ } //n
100
+ a = siki.substring(levelll, levelrl);
101
+ sikipa = siki.substring(0, levelll);
102
+ var levellr = levelrl;
103
+ var levelrr = -1;
104
+ for (var cnte = levellr + 1; cnte < sikilong; cnte++) { //o
105
+ for (var cntnumc = 0; cntnumc < 4; cntnumc++) { //p
106
+ if (siki.charAt(cnte) == sisoku[cntnumc]) { //q
107
+ levelrr = siki.charAt(cnte);
108
+ break;
109
+ } //q
110
+ if (levelrr != -1) { //r
111
+ break;
112
+ } //r
113
+ } //p
114
+ if (levelrr != -1) { ///u
115
+ break;
116
+ } ///u
117
+ } //o
118
+ if (levelrr == -1) { //s
119
+ levelrr = sikilong;
120
+ } //s
121
+ b = siki.substring(levellr + 1, levelrr);
122
+ sikipb = siki.substring(levellr + 1, sikilong);
123
+ if (levelrl = sisoku[2]) { //t
124
+ en = a * b;
125
+ } else if (levelrl == sisoku[3]) { //t
126
+ en = a / b;
127
+ } //t
128
+ siki = sikipa + en + sikipb;
129
+ sikilong = siki.length;
130
+ } //4
131
+ //+-の計算
132
+ var nisokuth = 0;
133
+ for (var cntf = 0; cntf <= sikilong; cntf++) {
134
+ for (var cntnumd = 0; cntnumd < 4; cntnumd++) {
135
+ if (sisoku[cntnumd] == siki.charAt(cntf)) {
136
+ nisokuth++;
137
+ }
138
+ }
139
+ }
140
+ for (var cntmainb = 0; cntmainb <= nisokuth; cntmainb++) { //1
141
+ var middle = -1;
142
+ for (var cntg = 0; cntg < sikilong; cntg++) { //2
143
+ for (var cntnume = 0; cntnume < 2; cntnume++) { //3
144
+ if (sisoku[cntnume] == siki.charAt(cntg)) { //4
145
+ var middle = cntg;
146
+ break;
147
+ } //4
148
+ if (middle != -1) { //5
149
+ break;
150
+ } //5
151
+ } //3
152
+ if (middle = -1) {
153
+ break;
154
+ }
155
+ var lrright = -1;
156
+ var llleft = 0;
157
+ var llright = middle - 1;
158
+ var lrleft = middle + 1;
159
+ for (var cntaa = lrleft; cntaa < sikilong - lrleft + 1; cntaa++) {
160
+ for (var cntnumaa = 0; cntnumaa < 2; cntnumaa++) {
161
+ if (sisoku[cntnumaa] == siki.charAt(cntaa)) {
162
+ lrright = cntaa - 1;
163
+ break;
164
+ }
165
+ }
166
+ if (lrright == -1) {
167
+ lrlight = sikilong;
168
+ }
169
+ }
170
+ var a = siki.substring(llleft, llright);
171
+ var b = siki.substring(lrleft, lrright);
172
+ if (siki.charAt(middle) == sisoku[0]) {
173
+ en = a + b;
174
+ } else if (siki.charAt(middle) = sisoku[1]) {
175
+ en = a - b;
176
+ }
177
+ var sikipb = substring(lrright, sikilong);
178
+ siki = en + sikipb;
179
+ } //2
180
+ if (middle == -1) {
181
+ alert("答え:" + siki);
182
+ return;
183
+ }
184
+ } //1
185
+ /*}catch(e){
186
+ alert("式が不適合もしくはエラーです。");
187
+ return;
188
+ }
189
+ finally{
190
+ return;
191
+ }*/
192
+ } //a
193
193
  ```
194
194
 
195
195
  ###試したこと