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

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

ただいまの
回答率

90.34%

  • JavaScript

    17479questions

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

  • HTML

    9539questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 566

ko20vonobird

score 41

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

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

該当のソースコード

<!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:
                var sikip = "";
            for (var cntmain = 0; cntmain < 1; cntmain++) { //i////gotoの代わり
                subloop: if (sisokunochk != 0) {
                    break loop;
                }
                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>

試したこと

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

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

なし

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

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 18:34

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

    キャンセル

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/06 18:33

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

    キャンセル

  • 2017/01/06 18:35

    久しぶりなら少し変わったところが有ると思うので、オライリー本を通読するのがお勧めですよー。

    【JavaScript 第6版 : David Flanagan, 村上 列 : 本 : Amazon.co.jp】
    http://www.amazon.co.jp/dp/4873115736

    キャンセル

  • 2017/01/06 18:47

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

    キャンセル

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

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • JavaScript

    17479questions

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

  • HTML

    9539questions

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