# js-for,while,do while,breake & continue區別,if,迴圈小練習 ###### tags: `javascript` ## for for(條件式){ 執行程式 } ex: - for( let i = 1; i <= 9; i++){ document.write ( i ) } - for( let a = 1; a <=10; a+=3){ document.write ( a ) } >let 是區域函數,所以在個別的for迴圈裡可以重複使用,而var是全域變數 ## while,do while - while(條件式){ 執行程式 } **須小心無限迴圈與分號!!** <pre><code>ex: let input = ""; while(input!=="end"){ input = prompt("輸入end"); }</code></pre> - do{ 執行程式 }while(條件式) <pre><code>ex: do { input = prompt ("輸入end") }while(input!=="end")</code></pre> ## breake & continue區別 >continue會跳過這次執行,然後繼續跑下一個,breake會完全中止執行 <pre><code>ex: for(let i=0 ; i<10 ; i++){ if(i==5){ continue; } if(i==7){ breake; } document.write(i); }</code></pre> ## h2簡易小練習 - 猜數字 - 9*9漸層乘法表 - 列印出51顆漸層的星星 - 半個星星塔 - 完整星星塔 - 輸日日期知道今年的第幾天(有潤平年) ### 猜數字 <pre><code> let count = 1; let input = ""; while(input!==164){ input = prompt(`第${count}次猜`) if(input==164){ alert("恭喜猜對") break; }else if(input===null || input ===""){ alert("你為什麼不回答"); }else if(input>164){ alert("你猜太大了!") }else if(input<164){ alert("你猜太小了!") }else{ alert("你來亂的嗎!!") } count++; }</code></pre> ### 9*9漸層乘法表 <iframe src="https://codepen.io/yc-wang/pen/PoNmJwd" width="800" height="600" frameborder="0" style="border: 0;" allowfullscreen="" aria-hidden="false" tabindex="0"> </iframe> ### 列印出51顆漸層的星星 <iframe src="https://codepen.io/yc-wang/pen/mdPmBJK?editors=1000" width="800" height="500" frameborder="0" style="border: 0;" allowfullscreen="" aria-hidden="false" tabindex="0"> </iframe> ### 半個星星塔 ```htmlmixed= let stars =prompt("請輸入要的塔數") document.write("<table>") for(let i=0 ; i<=stars ;i++){ document.write("<tr>") for(let j=0; j<i ; j++){ document.write("<td>") document.write(`<span style='color:rgb(${255-(i*5)},0,${j*2.5})'>★</span>`) document.write("</td>") } document.write("</tr>") } document.write("<table>") ``` ### 完整星星塔 ```htmlmixed= let stars =prompt("請輸入要的塔數") document.write("<table>") for(let i=0 ; i<=stars ;i++){ document.write("<tr>") for(j=1;j<=stars-i;j++){ document.write("<td>"); document.write("</td>"); } for(k=1;k<=2*i-1;k++){ document.write("<td>"); document.write(`<span style='color:rgb(150,0,150)'>★</span>`); document.write("</td>"); } document.write("</tr>") } document.write("<table>") ``` ### 輸日日期知道今年的第幾天(有潤平年) ```htmlmixed= let year = prompt("請輸入西元年"); let month = prompt("月份"); let date = prompt("日期"); let sum = 0; let y = parseInt(year); let m = parseInt(month); for (let i = 1; i < m; i++) { if (i < 9 && i % 2 !== 0) { sum += 31; } else if (i < 9 && i % 2 == 0) { if (i == 2) { if (y % 4 == 0 && y % 100 !== 0) { sum += 29; } else if (y % 400 == 0) { sum += 29; } else { sum += 28; } } else { sum += 30; } } else if (i >= 9 && i % 2 !== 0) { sum += 30; } else { sum += 31; } } let x = sum + parseInt(date); alert(`${x}`); ``` ### 額外練習 一球從 100 公尺高度自由落下,每次落地後反跳回原高度的一半再落下,請問 第 10 次落地時,共經過多少公尺? 第 10 次反彈多高? ```js 自己解的 let hight = 100; let distance = 0; let x = 1; let y = 0; for (let i = 0; i <= 9; i++) { distance += hight / x + hight / (x * 2); x *= 2; y = hight / x; console.log(y); } console.log(distance - y); 老師解的 let hight = 100; let distance = 0; for (let i = 0; i < 10; i++) { distance += hight ; hight/=2 if(i!==10){distance+=hight;} } document.write(`第 10 次落地時,共經過${distance}公尺`); document.write(`第 10 次反彈高為${height}`) } ```