11.19 JS基础4
- 作业回顾与修改
页面输入一个5位数数字; 12345 ,我们验证一下这个数字是否为回文数
原有作业的缺漏:原来我理解错误,作答只能做死板的五位数回文判断,无法做其他(字母,中文,以及非五位数数字)判断。
<body>
<input type="text" id="num" placeholder="请输入一个数字" value="12321">
<input type="button" id="btn" value="判断是否回文">
<input type="text" id="result" value="" readonly>
<!--结果显示部分设置为只读,无法变化-->
<script>
//原有作业的缺漏:只能做死板的五位数回文判断,无法做其他(字母,中文,以及非五位数数字)判断
//修改时将输入的字符串切割为两部分,用i和j分别赋值为字符串最前和最后下标值(0和length-1),取到前后两部分,判断是否相等,足够灵活
document.getElementById("btn").onclick = function () {
//获取文本框的值
let str = document.getElementById("num").value;
//如果数据是数字格式
//解决方案: 12321 =>字符串 =>number -> 数字拆分
//解决方案: 12321 拿到了数据,这个文本框的值string,用字符串的方法来拆分 charAt(x)
let length = str.length;//字符串长度
//定义一个标记 因为循环里的条件判断未结束,不能做结果输出,用flag寄存到循环外面输出为好
let flag = true; //是回文
for (let i = 0, j = length - 1; i < parseInt(length / 2); i++, j--) {
console.log(str.charAt(i));//str.charAt(i) 从前向后取
console.log(str.charAt(j));//str.charAt(j) 从后向前取
if (str.charAt(i) != str.charAt(j)) {
flag = false;//不是回文
break;//跳出循环体
}
}
if (flag) {
document.getElementById("result").value = str + "是回文";
} else {
document.getElementById("result").value = str + "不是回文";
}
}
</script>
</body>
亮点:将字符串切割成两部分,两两循环输出进行对比;用flag接收循环中的条件判断,以在循环外进行结果输出,足够灵活。
- while循环
基本语法:
<script>
//while
let i =1;//1 变量定义初始化
//2 小括号中 是条件
//定义一个变量存放累加的和
let sum = 0;
while(i<=100){
sum = sum + i;
//3变量要变化
i++;
}
console.log("sum:"+sum)
</script>
之前的练习用while改写:
<script>
//while
//1 . 猴子吃桃
// 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
// 第二天早上又将第一天剩下的桃子吃掉一半,又多吃了一个。
// 以后每天早上都吃了前一天剩下的一半多一个。
// 到第 10 天早上想再吃时,发现只剩下一个桃子了。
// 编写程序求猴子第一天摘了多少个桃子。
// 假设第8天 2*((1+1)*2+1)个 第9天 (1+1)*2个 10天1个
let remain=1;//第10天剩下的1个
let i=9;//从第九天开始倒算回第一天
while(i>=1){//i其实就是计数器(counter)
remain=(remain+1)*2;
i--;
}console.log(remain);
//2. 小球问题
// 有一个弹力球,从100米的高度,落地后会弹起来.每次弹起的高度是原来高度的一半.
// 问,第10次落地后弹起来的高度是多少?
// 第10次落地的时候,这个小球经过的总的路程是多少米?
let height=100;//初始高度100
let path=height;//总路程先加这规律外的100米
let j=1;
while(j<=10){
console.log("第 "+j+" 次落地时候经过的距离: "+path+" 米");
height/=2;
if(j!=10){
path+=height*2;
}
j++;
}console.log(path);
//3. 水仙花数
// 寻找所有的水仙花数 水仙花数定义:
// a、一定是三位数-->153是“水仙花数”,因为:153 = 13 + 53 + 33。
// b、每一位的立方,加起来正好是这个数的本身,比如153=1*1*1 + 5*5*5 + 3*3*3;
let k=100;
while(k<=999){
let g=k%10;//个位数
let s=Math.floor(k/10%10);//十位数
let b=Math.floor(k/100);//百位数
if(k==g*g*g+s*s*s+b*b*b){
console.log(k);
}
k++;
}
</script>
- do...while循环
<script>
//do -while
let i = 1;
//do执行,先执行do{}内容.然后再判断条件,如果条件为true,则再次执行循环体。
do{
console.log("i :"+i);
i++;
}while(i<=10);
</script>
<script>
//do -while
let i = 1;
//do执行,先执行do{}内容.然后再判断条件,如果条件为true,则再次执行循环体。
do{
console.log("i :"+i);
i--;//死循环
}while(i<1);
</script>
<script>
let i =1;//1 变量定义初始化
//2 小括号中 是条件
//定义一个变量存放累加的和
let sum = 0;
do{
sum = sum + i;
//3变量要变化
i++;
} while(i<=100);
console.log("sum:"+sum)
</script>
对JS循环的小总结:
三个循环中,for循环语法比较简洁,比较适合循环次数确定,先判断,再执行循环体。
while循环,比较适合循环次数不确定,先判断,再执行循环体。
do-while循环,先执行一次循环体,再判断条件。do-while不管条件是否成立,都会执行一次循环体。
- 嵌套循环
演示:
<script>
//使用for循环来演示嵌套循环
//外循环控制行
let star = "";
for(let i=1; i<=5 ;i++){
//内部的循环称为内循环 每行打印几个*
for(let j=1;j<=i;j++){
//攒一个星星 , + 拼接
star = star+"*";
}
star = star+"\r\n";
}
console.log(star);// log一次就是打印并且换行了
</script>
通过使用嵌套循环打印三角形的相关练习:
<script>
//向左直角三角形
for(let i=1;i<=10;i++){//控制外层
for(let j=1;j<=i;j++){
document.write("♥");
}
document.write("</br>");
}
//向右直角三角形
for(let i=1;i<=10;i++) {//控制外层
for(let j=1;j<=10-i;j++){
document.write(" ");
}
for(let k=1;k<=i;k++){
document.write("♥");
}
document.write("<br/>");
}
//向左倒直角三角形
for(let i=10;i>=1;i--) {//控制外层 10 10 9 9 8 8
for(let k=1;k<=i;k++){
document.write("♥");
}
document.write("<br/>");
}
//向右倒直角三角形
for(let i=10;i>=1;i--) {//控制外层
for(let j=1;j<=10-i;j++){
document.write(" ");
}
for(let k=1;k<=i;k++){
document.write("♥");
}
document.write("<br/>");
}
//向左等腰三角形
for (let i = 1; i <= 10; i++) {//控制外层
for (let j = 1; j <= 10 - i; j++) {
document.write(" ");
}
for (let k = 1; k <= i; k++) {
document.write("♥");
}
document.write("<br/>");
}
for (let i = 10; i >= 1; i--) {//控制外层
for (let j = 1; j <= 10 - i; j++) {
document.write(" ");
}
for (let k = 1; k <= i; k++) {
document.write("♥");
}
document.write("<br/>");
}
//菱形
for (let i = 1; i <= 10; i++) {
for (let j = 1; j <= 10 - i; j++) {
document.write(" ");
}
for (let j = 1; j <= i; j++) {
document.write("♥");
}
document.write("<br>");
}
for (let i = 1; i <= 10; i++) {
for (let j = 1; j <= i; j++) {
document.write(" ");
}
for (let j = 1; j <= 10 - i; j++) {
document.write("♥");
}
document.write("<br>");
}
</script>
(Ps:其中打印菱形掌握得还不算熟练,需要多加练习。。)
今天的暂时就到这儿。。
23:02:28 11/21/2021
posted on 2021-11-21 23:03 heyiyang1312 阅读(5) 评论(0) 收藏 举报
浙公网安备 33010602011771号