質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

1370閲覧

JavaScriptにて、break loop;が効きません

ko20vonobird

総合スコア50

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/01/06 09:03

###発生している問題・エラーメッセージ

47行目に組んでいる"break loop;"が"Label Not Found"になります。その遷移先のloop:は、43行目にあります。

###該当のソースコード

JavaScript

1<!DOCTYPE HTML> 2<html> 3 4<head> 5 <title>万能電卓</title> 6 <script> 7 /*順番方式*/ 8 function keisan() { //a 9 /*try{*/ 10 var chk1 = 0 11 var str = document.siki.mainsiki.value; 12 var strlong = str.length; 13 for (var cnt = 0; cnt < 10; cnt++) { //b 14 if (str.indexOf(cnt, 0) != 0) { //c 15 chk1++ 16 } //c 17 } //b 18 if (chk1 > 9) { //d 19 alert("最初の文字は数字にしてください"); 20 return; 21 } //d 22 var siki = str; 23 var sikilong = siki.length; //0-x + 1 24 var sisoku = new Array(); 25 sisoku[0] = '+'; 26 sisoku[1] = '-'; 27 sisoku[2] = '*'; 28 sisoku[3] = '/'; 29 var sisokunum = 0; 30 var sisokunochk = 0; 31 for (var cntstrnum = 0; cntstrnum < sikilong; cntstrnum++) { //e 32 var chk = siki.charAt(cntstrnum); 33 for (var cnta = 0; cnta < 4; cnta++) { //f 34 if (chk == sisoku[cnta]) { //g 35 sisokunum = sisokunum + 1; 36 } //g 37 } //f 38 } //e 39 if (sisokunum == 0) { //h 40 alert("答え:" + siki); 41 return; 42 } //h 43 loop: 44 var sikip = ""; 45 for (var cntmain = 0; cntmain < 1; cntmain++) { //i////gotoの代わり 46 subloop: if (sisokunochk != 0) { 47 break loop; 48 } 49 for (var cntb = 0; cntb < sikilong; cntb++) { //j 50 var counter = 0; 51 var countertwo = 0; 52 var sikipa = ""; 53 var sikipb = ""; 54 var sikisisoku = ""; 55 var sikiright = ""; 56 for (var cntz = 0; cntz < 4; cntz++) { //k 57 if (sisoku[cntz] == siki.charAt(cntb)) { //l 58 counter = 1; 59 } //l 60 } //k 61 if (counter == 0) { //m 62 sikip = sikip + siki.charAt(cntb); //sikipはsikiの計算する部分の記録用 63 if (cntb == sikilong - 1) { //n 64 sikipb = sikip; 65 } //n 66 } else if (counter == 1) { //m 67 for (var cnty = 2; cnty < 4; cnty++) { //o 68 if (sisoku[cnty] == siki.charAt(cntb)) { //p 69 if (sikipa == "") { //q 70 sikipa = sikip; 71 sikip = ""; 72 } else { //q 73 sikipb = sikip; 74 sikiright = siki.substr(cntb + 1, sikilong - 1); //怪しい 75 } //q 76 sikisisoku = siki.charAt(cntb); 77 break; 78 } //p 79 } //o 80 } //m 81 for (var cntx = 0; cntx < 2; cntx++) { //r 82 if (sisoku[cntx] == siki.charAt(cntb) && twosisoku == 0) { //s//twosisokuは*/の数 83 sikipa = sikip 84 sikip = ""; 85 sikisisoku = siki.charAt(cntb); 86 } else if (sisoku[cntx] == siki.charAt(cntb) && twosisoku > 0) { //s 87 sikip = ""; 88 } //s 89 } //r 90 91 if (sikisisoku != "" && sikipa != "" && sikipb != "") { //s 92 if (sikisisoku == sisoku[0]) { //t 93 sikileft = sikipa + sikipb; 94 siki = sikileft.toString() + sikiright.toString(); //以下共通 95 } else if (sikisisoku == sisoku[1]) { //t 96 sikileft = sikipa - sikipb; 97 siki = sikileft.toString() + sikiright.toString(); 98 } else if (sikisisoku == sisoku[2]) { //t 99 sikileft = sikipa * sikipb; 100 siki = sikileft.toString() + sikiright.toString(); 101 } else if (sikisisoku == sisoku[3]) { //t 102 sikileft = sikipa / sikipb; 103 siki = sikileft.toString() + sikiright.toString(); 104 } //t 105 } //s 106 sikilong = siki.length; //計算後を想定した記述 107 sisokunochk = 0; 108 for (var cntc = 0; cntc < sikilong; cntc++) { //t 109 var chka = siki.charAt(cntc); 110 for (var cntd = 0; cntd < 4; cntd++) { //u 111 if (chka == sisoku[cntd]) { //v 112 sisokunochk = sisokunochk + 1; 113 } //v 114 } //u 115 } //t 116 if (sisokunochk == 0) { //w 117 break; //もう四則演算子がない 118 } //w 119 if (sisokunochk != 0) { //x 120 break subloop; //まだ四則演算子がある 121 } //x 122 } //j 123 alert("答え:" + siki); 124 return; 125 } //i 126 127 /*}catch(e){ 128 alert("式が不適合もしくはエラーです。"); 129 return; 130 } 131 finally{ 132 return; 133 }*/ 134 } //a 135 </script> 136</head> 137 138<body> 139 <form name="siki"> 140 式:<input type="text" name="mainsiki" value=""> 141 <br> 142 <input type="button" value="計算" onclick="keisan()"> 143 </form> 144 145</body> 146 147</html>

###試したこと
きれいに整形し、{}の過不足を気づく範囲で揃えました。

###補足情報(言語/FW/ツール等のバージョンなど)
なし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

breakでlabelを使いたいのでしたら、
labelはfor文の前に記述するようにしてください。

下記の様に書き直せばエラーは消えます。

loop: for (var cntmain = 0; cntmain < 1; cntmain++) { //i////gotoの代わり if (sisokunochk != 0) { break loop; } subloop: for (var cntb = 0; cntb < sikilong; cntb++) { //j

投稿2017/01/06 09:19

namimon

総合スコア726

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ko20vonobird

2017/01/06 09:34

なるほど、そういう順番でないといけないのですね。他の言語と違っているので混乱していました、ありがとうございます。
guest

0

ラベルとfor の間に文があるためでは?

【break文とcontinue文でのラベル指定 - 繰り返し処理 - JavaScript入門】
http://www.ajaxtower.jp/js/for/index11.html

ただしラベルが付いた文の中に、そのラベルを指定したbreak文が含まれていなければなりません。

投稿2017/01/06 09:14

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ko20vonobird

2017/01/06 09:33

回答ありがとうございます。正直二人の回答はどちらも合っていたのでベストアンサーは悩みました。が、解決に直結したのはnamimonさんでしたのでnamimonさんを選びました。JavaScriptを本格的に書くのは非常に久しぶりで、多言語と混乱してしまっていたようです、ありがとうございました。
kei344

2017/01/06 09:35

久しぶりなら少し変わったところが有ると思うので、オライリー本を通読するのがお勧めですよー。 【JavaScript 第6版 : David Flanagan, 村上 列 : 本 : Amazon.co.jphttp://www.amazon.co.jp/dp/4873115736
ko20vonobird

2017/01/06 09:47

本屋でもあんまりいいのが無かったので助かります!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問