import{_ as Q}from"./Ba76BwjT.js";import{b as R,_ as U,y as W}from"./TI2hYmRW.js";import{e as G,x as J,v as X,av as Y,Q as Z,c as d,f as n,b as i,a as t,w as f,H as tt,E as st,o as u,d as p,m as _,t as o,n as nt,F as j,r as C,D as et,h as at,G as h,i as E,_ as it}from"./DpdQcRr7.js";import"./BcpEzrWT.js";const ot={class:"chapter-page"},lt={key:0,class:"not-found"},rt={class:"pane-scroll"},ct={class:"chapter-header"},ut={class:"chapter-icon"},dt={class:"chapter-heading"},pt={class:"chapter-phase"},mt={class:"chapter-title"},ht={class:"chapter-summary"},gt={class:"progress-card"},bt={class:"progress-top"},vt={class:"progress-count"},_t={class:"progress-track"},yt={class:"panel"},ft={class:"panel-title"},kt={class:"learn-list"},St={class:"lesson-note"},wt={class:"chapter-nav"},Mt={class:"nav-text"},jt={class:"nav-name"},Ct={key:1,class:"nav-spacer"},Lt={class:"nav-text"},Ot={class:"nav-name"},zt={key:3,class:"nav-spacer"},Et={class:"pane-scroll"},$t={class:"try-block"},xt={class:"try-head"},It={class:"try-title"},Nt={class:"editor-card"},Rt={class:"editor-head"},Vt={class:"file-name"},At={class:"editor-actions"},Bt=["disabled"],Tt={class:"editor-wrap"},qt={class:"console"},Dt={class:"console-label"},Kt={key:0,class:"console-empty"},Ft={class:"drill-block"},Ht={class:"try-head"},Pt={class:"try-title"},Qt={class:"try-sub"},Ut={class:"drill-heading"},Wt={class:"drill-label"},Gt={class:"drill-hint"},Jt={class:"drill-count"},Xt={class:"tile-grid"},Yt=["disabled","onClick"],Zt={class:"tile-top"},ts={class:"tile-no"},ss={class:"tile-title"},ns=G({__name:"[chapter]",setup(es){const $=[{key:"warmup",label:"ウォームアップ",hint:"コードを読む・数字を1つ変える",count:8},{key:"choose",label:"えらぶ",hint:"2つから正しいコードをえらぶ",count:7},{key:"fill",label:"うめる",hint:"空いているところをうめる",count:6},{key:"fix",label:"なおす",hint:"まちがっているコードを直す",count:5},{key:"create",label:"じぶんで",hint:"さいしょから自分で書く",count:4}],L=[{no:1,phaseLabel:"フェーズ1 ・ 自作アイテム",title:"関数",summary:"メソッドを定義して、呼び出す",icon:"mdi:function-variant",status:"cleared",learn:["メソッドを定義して呼び出す","引数で値を受け取る","return で答えを返す"],playground:`public class Main {
    // 2つの数をたして返す
    static int add(int a, int b) {
        return a + b;
    }

    public static void main(String[] args) {
        System.out.println(add(3, 5));   // ← 数字を変えて実行してみよう
    }
}`,sampleOutput:"8",problems:["{a} と {b} をたした答えを返す","{a} から {b} を引いた答えを返す","{a} と {b} をかけた答えを返す","{n} を2倍にして返す","{n} に10をたして返す","{a} と {b} の大きいほうを返す","{n} の3倍を返す","「こんにちは」という文字を返す","{a} を {b} でわった商を返す","{n} を文字にして返す"]},{no:2,phaseLabel:"フェーズ1 ・ 自作アイテム",title:"if",summary:"もし〜なら で、処理を分ける",icon:"mdi:call-split",status:"current",learn:["「もし〜なら」で処理を分ける","< == > で数を比べる","条件に合ったときだけ実行する"],playground:`public class Main {
    // 点数が60以上なら「合格」
    static String judge(int score) {
        if (score >= 60) {
            return "合格";
        }
        return "不合格";
    }

    public static void main(String[] args) {
        System.out.println(judge(80));   // ← 点数を変えて実行してみよう
    }
}`,sampleOutput:"合格",problems:["{a} と {b} のうち大きいほうを返す","点数が {n} 以上なら「合格」を返す","{n} が偶数か判定する","{a} と {b} が等しいか判定する","{n} の絶対値を返す","{n} が正・負・ゼロのどれかを返す","{n} が3の倍数なら「Fizz」を返す","{n} が10より大きいか判定する","3つの数のうち一番大きいものを返す","{n} がひと桁か判定する"]},{no:3,phaseLabel:"フェーズ1 ・ 自作アイテム",title:"乱数",summary:"ランダムな数を作る",icon:"mdi:dice-5",status:"locked",learn:["Random で乱数を作る","nextInt で範囲を決める","% (あまり) で「n回に1回」を作る"],playground:`import java.util.Random;

public class Main {
    public static void main(String[] args) {
        // 1〜6 のサイコロ
        int dice = new Random().nextInt(6) + 1;
        System.out.println("サイコロ: " + dice);
    }
}`,sampleOutput:"サイコロ: 4",problems:["1から {n} までの乱数を返す","サイコロ（1〜6）の目を返す","0か1をランダムに返す","{a} から {b} までの乱数を返す","コインの表裏（true/false）を返す","{n} 個に1回だけ true を返す","乱数が偶数か判定する","ランダムな2桁の数を返す","当たり（{n}分の1）を引けたか返す","{n} 面のサイコロをふる"]},{no:4,phaseLabel:"フェーズ1 ・ 自作アイテム",title:"かつ・または",summary:"2つの条件を組み合わせる（&& ・ ||）",icon:"mdi:set-center",status:"locked",learn:["&&（かつ）で2つの条件をつなぐ","||（または）でどちらかを満たす","範囲の中か外かを判定する"],playground:`public class Main {
    // 0以上 かつ 100以下 なら true
    static boolean inRange(int n) {
        return n >= 0 && n <= 100;
    }

    public static void main(String[] args) {
        System.out.println(inRange(50));   // ← 数を変えて実行してみよう
    }
}`,sampleOutput:"true",problems:["{n} が {a} 以上 {b} 以下か判定する","{n} が偶数かつ正か判定する","{a} と {b} が両方とも正か判定する","{n} が3か5の倍数か判定する","{a} か {b} のどちらかが0か判定する","{n} がひと桁か判定する","{a} と {b} が同じ符号か判定する","{n} が範囲外（0未満か100超）か判定する","{a} と {b} の少なくとも一方が10以上か","うるう年か判定する"]},{no:5,phaseLabel:"フェーズ1 ・ 自作アイテム",title:"for",summary:"くり返しで、まとめて計算する",icon:"mdi:repeat",status:"locked",learn:["for でくり返す","合計や個数を数える","ループの回数を決める"],playground:`public class Main {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; i <= 10; i++) {
            sum += i;   // 1から10までたす
        }
        System.out.println(sum);
    }
}`,sampleOutput:"55",problems:["1から {n} までの合計を返す","1から {n} までの偶数の合計を返す","{n} の階乗を返す","1から {n} までで3の倍数を数える","{n} 個の星（*）をつなげて返す","1から {n} までの奇数の合計を返す","{a} の段（かけ算）を {n} まで作る","1から {n} までを逆順にたす","{n} の各位の数をたす","{a} を {n} 回たした答えを返す"]},{no:6,phaseLabel:"フェーズ1 ・ 自作アイテム",title:"連想配列",summary:"キーごとに値をおぼえる（Map）",icon:"mdi:notebook-outline",status:"locked",learn:["Map でキーと値を対応させる","put で登録・get で取り出す","キーごとに数をおぼえる"],playground:`import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> scores = new HashMap<>();
        scores.put("たろう", 80);          // 名前ごとに点数をおぼえる
        System.out.println(scores.get("たろう"));
    }
}`,sampleOutput:"80",problems:["名前をキーに点数をおぼえて取り出す","キー「{n}」の値を返す","出てきた文字の数をかぞえる","キーがあるか調べて返す","2人の点数を登録して合計する","キーがなければ0を返す","一番点数の高い人を返す","同じ数字が何回出たか数える","キーの個数を返す","値を1ふやして更新する"]},{no:7,phaseLabel:"フェーズ1 ・ 自作アイテム",title:"クラス",summary:"処理に名前をつけて、まとめる",icon:"mdi:package-variant-closed",status:"locked",learn:["処理をメソッドに切り出す","名前をつけて呼び出す","同じ処理を再利用する"],playground:`public class Main {
    // 「偶数か」に名前をつけた
    static boolean isEven(int n) {
        return n % 2 == 0;
    }

    public static void main(String[] args) {
        System.out.println(isEven(4));   // ← 数を変えて実行してみよう
    }
}`,sampleOutput:"true",problems:["偶数判定を isEven メソッドにする","合計を求める処理を切り出す","最大値を求めるメソッドを作る","「合格か」を判定するメソッドを作る","2つの数を交換するメソッドを作る","絶対値を返すメソッドを作る","3の倍数か返すメソッドを作る","平均を求めるメソッドを作る","文字を {n} 回くり返すメソッドを作る","素数か判定するメソッドを作る"]},{no:8,phaseLabel:"フェーズ2 ・ 既存イベント",title:"ガード節",summary:"条件に合わなければ帰る（早めに return）",icon:"mdi:shield-outline",status:"locked",learn:["条件に合わなければ早めに return する","ネストを浅くたもつ","例外的な入力を先にはじく"],playground:`public class Main {
    static int safeDivide(int a, int b) {
        if (b == 0) return 0;   // 0では割れないので先に帰る
        return a / b;
    }

    public static void main(String[] args) {
        System.out.println(safeDivide(10, 0));
    }
}`,sampleOutput:"0",problems:["b が0なら0を返す（それ以外は a÷b）","マイナスなら0にして返す","空文字なら「なし」を返す","{n} 未満なら処理せず帰る","null なら0を返す","範囲外なら -1 を返す","負の数を先にはじいて0を返す","0以下なら1を返す","{a} で割り切れなければ帰る","長さが {n} 未満なら帰る"]},{no:9,phaseLabel:"フェーズ2 ・ 既存イベント",title:"instanceof",summary:"「その型なら」を決まり文句で書く",icon:"mdi:help-rhombus-outline",status:"locked",learn:["instanceof で型を調べる","パターン変数で受け取る","型に応じて処理を変える"],playground:`public class Main {
    static int lengthOf(Object obj) {
        if (obj instanceof String s) {
            return s.length();   // 文字列なら長さを返す
        }
        return -1;
    }

    public static void main(String[] args) {
        System.out.println(lengthOf("hello"));
    }
}`,sampleOutput:"5",problems:["String なら長さを返す","Integer ならその値を返す","オブジェクトが String か判定する","パターン変数で受けて大文字にする","Integer でなければ0を返す","型に応じて違う値を返す","String なら数に変換して返す","リスト型か判定する","型の名前を文字で返す","null でなく String か判定する"]},{no:10,phaseLabel:"フェーズ2 ・ 既存イベント",title:"世界のイベント",summary:"for と if を組み合わせて調べる",icon:"mdi:earth",status:"locked",learn:["for と if を組み合わせる","リストを調べて数える","文字列をあつかう"],playground:`import java.util.List;

public class Main {
    public static void main(String[] args) {
        int count = 0;
        for (String name : List.of("Aoi", "Ken", "Ami")) {
            if (name.startsWith("A")) {
                count++;   // A で始まる名前を数える
            }
        }
        System.out.println(count);
    }
}`,sampleOutput:"2",problems:["リストの中の最大値を返す","リストの合計を返す","A で始まる名前の数を数える","一番長い文字列を返す","リストに {n} が含まれるか判定する","正の数だけ合計する","偶数の個数を数える","文字列を逆から返す","リストの平均を返す","重複を除いた個数を返す"]}],V=J(),x=X(),k=h(()=>Number(V.params.chapter)),r=h(()=>L.find(e=>e.no===k.value)??null),S=h(()=>L.find(e=>e.no===k.value-1)??null),w=h(()=>L.find(e=>e.no===k.value+1)??null),y=E("");Y(()=>{r.value&&(y.value=r.value.playground)});const m=E("idle"),b=E([]);let O=null;const A=()=>{if(!r.value||m.value==="running")return;m.value="running",b.value=["> javac Main.java","コンパイル中..."];const e=r.value.sampleOutput;O=setTimeout(()=>{b.value=["> javac Main.java","> java Main",e],m.value="done"},800)},B=()=>{r.value&&(y.value=r.value.playground),m.value="idle",b.value=[]};Z(()=>{O&&clearTimeout(O)});const T=(e,s)=>e==="locked"?"locked":e==="cleared"||s<=11?"cleared":s===12?"current":"todo",q=(e,s)=>{const a=s%8+2,g=s*3%7+2,v=s*2%30+1;return e.replace(/\{a\}/g,String(a)).replace(/\{b\}/g,String(g)).replace(/\{n\}/g,String(v))},D=e=>{const s=[];let a=1;for(const g of $)for(let v=0;v<g.count;v++){const c=a%7===0,l=c?"このコードは何を返す？":q(e.problems[(a-1)%e.problems.length],a);s.push({no:a,title:l,kind:c?"quiz":"judge",status:T(e.status,a),sectionKey:g.key}),a++}return s},z=h(()=>r.value?D(r.value):[]),K=h(()=>$.map(e=>({...e,items:z.value.filter(s=>s.sectionKey===e.key)}))),M=h(()=>z.value.length),I=h(()=>z.value.filter(e=>e.status==="cleared").length),F=h(()=>M.value?Math.round(I.value/M.value*100):0),H={cleared:"mdi:check",current:"mdi:pencil",todo:"mdi:circle-outline",locked:"mdi:lock"},P=e=>{e.status!=="locked"&&x.push(`/user/java/${k.value}/${e.no}`)},N=e=>x.push(`/user/java/${e}`);return(e,s)=>{const a=st("Icon"),g=Q,v=U;return u(),d("div",ot,[n(r)?(u(),tt(n(W),{key:1,class:"chapter-splitpanes"},{default:f(()=>[i(n(R),{size:38,"min-size":"24",class:"pane-lesson"},{default:f(()=>[t("div",rt,[i(g,{to:"/user/java",class:"crumb"},{default:f(()=>[i(a,{icon:"mdi:arrow-left",width:16,height:16}),s[5]||(s[5]=p(" Java学習 ",-1))]),_:1}),t("header",ct,[t("span",{class:_(["chapter-no",`is-${n(r).status}`])},o(n(r).no),3),t("span",ut,[i(a,{icon:n(r).icon,width:26,height:26},null,8,["icon"])]),t("div",dt,[t("span",pt,o(n(r).phaseLabel),1),t("h1",mt,o(n(r).title),1),t("p",ht,o(n(r).summary),1)])]),t("section",gt,[t("div",bt,[s[6]||(s[6]=t("span",{class:"progress-label"},"この章の進み具合",-1)),t("span",vt,o(n(I))+" / "+o(n(M))+" 問",1)]),t("div",_t,[t("div",{class:"progress-fill",style:nt({width:`${n(F)}%`})},null,4)])]),t("section",yt,[t("h2",ft,[i(a,{icon:"mdi:book-open-page-variant-outline",width:18,height:18}),s[7]||(s[7]=p(" この章で学ぶこと ",-1))]),t("ul",kt,[(u(!0),d(j,null,C(n(r).learn,(c,l)=>(u(),d("li",{key:l},[i(a,{icon:"mdi:check",width:15,height:15,class:"learn-check"}),t("span",null,o(c),1)]))),128))]),t("p",St,[i(a,{icon:"mdi:arrow-right-circle-outline",width:15,height:15}),s[8]||(s[8]=p(" 右のエディタで、この章のコードを実際に動かしてみよう。 ",-1))])]),t("nav",wt,[n(S)?(u(),d("button",{key:0,type:"button",class:"nav-btn",onClick:s[0]||(s[0]=c=>N(n(S).no))},[i(a,{icon:"mdi:chevron-left",width:18,height:18}),t("span",Mt,[s[9]||(s[9]=t("span",{class:"nav-label"},"前の章",-1)),t("span",jt,o(n(S).no)+". "+o(n(S).title),1)])])):(u(),d("span",Ct)),n(w)?(u(),d("button",{key:2,type:"button",class:"nav-btn is-next",onClick:s[1]||(s[1]=c=>N(n(w).no))},[t("span",Lt,[s[10]||(s[10]=t("span",{class:"nav-label"},"次の章",-1)),t("span",Ot,o(n(w).no)+". "+o(n(w).title),1)]),i(a,{icon:"mdi:chevron-right",width:18,height:18})])):(u(),d("span",zt))])])]),_:1}),i(n(R),{size:62,"min-size":"40",class:"pane-practice"},{default:f(()=>[t("div",Et,[t("section",$t,[t("div",xt,[t("h2",It,[i(a,{icon:"mdi:flask-outline",width:18,height:18}),s[11]||(s[11]=p(" まず試してみよう ",-1))]),s[12]||(s[12]=t("span",{class:"try-sub"},"実行して、どう動くか見てみよう。数字を変えてもOK",-1))]),t("div",Nt,[t("div",Rt,[t("span",Vt,[i(a,{icon:"mdi:language-java",width:15,height:15}),s[13]||(s[13]=p(" Main.java ",-1))]),t("div",At,[t("button",{type:"button",class:"btn-ghost",onClick:B},[i(a,{icon:"mdi:restore",width:15,height:15}),s[14]||(s[14]=p(" もとに戻す ",-1))]),t("button",{type:"button",class:"btn-run",disabled:n(m)==="running",onClick:A},[i(a,{icon:n(m)==="running"?"mdi:loading":"mdi:play",width:16,height:16,class:_({spin:n(m)==="running"})},null,8,["icon","class"]),p(" "+o(n(m)==="running"?"実行中...":"実行する"),1)],8,Bt)])]),t("div",Tt,[i(v,{modelValue:n(y),"onUpdate:modelValue":s[2]||(s[2]=c=>et(y)?y.value=c:null),language:"java",theme:"vs-dark"},null,8,["modelValue"])]),t("div",qt,[t("span",Dt,[i(a,{icon:"mdi:console-line",width:14,height:14}),s[15]||(s[15]=p(" 実行結果 ",-1))]),n(b).length?at("",!0):(u(),d("p",Kt,"「実行する」をおすと、ここに結果が出ます")),(u(!0),d(j,null,C(n(b),(c,l)=>(u(),d("p",{key:l,class:_(["console-line",{"is-out":n(m)==="done"&&l===n(b).length-1}])},o(c),3))),128))])])]),t("section",Ft,[t("div",Ht,[t("h2",Pt,[i(a,{icon:"mdi:sword",width:18,height:18}),s[16]||(s[16]=p(" この章の問題 ",-1))]),t("span",Qt,"ぜんぶで "+o(n(M))+" 問。上からじゅんに挑戦しよう",1)]),(u(!0),d(j,null,C(n(K),c=>(u(),d("div",{key:c.key,class:"drill-section"},[t("div",Ut,[t("h3",Wt,o(c.label),1),t("span",Gt,o(c.hint),1),t("span",Jt,o(c.items.length)+"問",1)]),t("div",Xt,[(u(!0),d(j,null,C(c.items,l=>(u(),d("button",{key:l.no,type:"button",class:_(["tile",[`is-${l.status}`]]),disabled:l.status==="locked",onClick:as=>P(l)},[t("div",Zt,[t("span",ts,o(l.no),1),t("span",{class:_(["tile-status",`status-${l.status}`])},[i(a,{icon:H[l.status],width:14,height:14},null,8,["icon"])],2)]),t("span",ss,o(l.title),1),t("span",{class:_(["tile-kind",`kind-${l.kind}`])},[i(a,{icon:l.kind==="quiz"?"mdi:help-circle-outline":"mdi:code-tags",width:12,height:12},null,8,["icon"]),p(" "+o(l.kind==="quiz"?"確認テスト":"課題"),1)],2)],10,Yt))),128))])]))),128))])])]),_:1})]),_:1})):(u(),d("div",lt,[i(a,{icon:"mdi:map-marker-question-outline",width:40,height:40}),s[4]||(s[4]=t("p",null,"その章は見つかりませんでした",-1)),i(g,{to:"/user/java",class:"back-btn"},{default:f(()=>[i(a,{icon:"mdi:arrow-left",width:16,height:16}),s[3]||(s[3]=p(" 章一覧へもどる ",-1))]),_:1})]))])}}}),cs=it(ns,[["__scopeId","data-v-4f17d577"]]);export{cs as default};
