JavaScript学习笔记—循环

JS三种循环语句

  • while语句
  • do-while语句
  • for语句

通常编写一个循环,需要有三个条件:
(1)初始化表达式
(2)条件表达式
(3)更新表达式

1. while循环

  • 语法
while (condition) {
  // 代码
  // 所谓的“循环体”
}

当 condition 为真时,执行循环体的 code。

  • 示例
let i = 0;
while (i < 3) { // 依次显示 0、1 和 2
  alert( i );
  i++;
}

let ii = 3;
while(ii) { // 当 ii 变成 0 时,条件为假,循环终止
  console.log(ii);
  ii--;
}
  • 练习
// 假设银行存款的年利率为5%,问1000元存多少年可以变成5000元?
let money = 1000;
let year = 0;
while(money < 5000){
  money = money * 1.05;
  year++;
}
console.log(`需要存${year}年,最终的钱数为${money}元`);

2. do...while循环

  • 语法
do {
  // 循环体
} while (condition);

循环首先执行循环体,然后检查条件,当条件为真时,重复执行循环体。

  • 示例
let i = 0;
do {
  console.log(i);
  i++;
} while (i < 3);

这种形式的语法很少使用,除非你希望不管条件是否为真,循环体 至少执行一次。通常我们更倾向于使用另一个形式:while(…) {…}。

3. for循环

  • 语法
// 初始化表达式; 条件表达式; 更新表达式
for (begin; condition; step) {
  // ……循环体……
}
  • 示例
// 结果为 0、1、2
for (let i = 0; i < 3; i++) {
  console.log(i);
}
  • 练习
// 1. 求100以内所有3的备注(求他们的个数和总和)
let count = 0; // 计数器
let result = 0; // 计算结果
for(let i = 1; i <= 100; i++){
  // 3的倍数
  if(i % 3 === 0){
    count++;
    result = result + i;
  }
}
console.log(`100以内3的倍数一共有${count}个,总和为${result}`);
//============================================================
// 优化后的方法
for(let i = 3; i <= 100; i+=3){
  count++;
  result += i;
}
console.log(`100以内3的倍数一共有${count}个,总和为${result}`);

/*
 2. 求1000以内的水仙花数
    水仙花数:一个n位数(n >= 3),如果它各个位上数字的n次幂之和还等于这个数,那么此数即为水仙花数
    例:153 --> 1 5 3 --> 1 125 27 --> 153
*/
for(let i = 100; i < 1000; i++){
  // 取百位数 parseInt(153 / 100) --> 1
  let bai = parseInt(i / 100);
  // 取十位数 parseInt((153 - 1 * 100) / 10) --> 5
  let shi = parseInt((i - bai * 100) / 10);
  // 取个位数 153 % 10 --> 3
  let ge = i % 10;
  // 判断是否水仙花数
  if(bai**3 + shi**3 + ge**3 === i){
    console.log(i);
  }
}
// 优化后的方法,主要用字符串的特性 let str = "123" 显示每位数:str[0] str[1] str[2]
for(let i = 100; i < 1000; i++){
  let strI = i + "";
  if(strI[0]**3 + strI[1]**3 + strI[2]**3 === i){
    console.log(i);
  }
}
/*
3. 获取用户输入的大于1的整数(暂不考虑输错的情况),如果是质数打印结果
   质数:一个数如果只能被1和它本身整除,即为质数
   1不是质数也不是合数
*/
let num = +prompt("请输入一个大于1的整数:");
let flag = true;
for(let i=2; i<num; i++){
  if(num % i === 0){
    flag = false;
    break;
  }
}
if(flag){
  alert(`${num}是质数`);
}else{
  alert(`${num}不是质数`);
}

4. 循环嵌套

/*
<style>
  span{
    display: inline-block;
    width: 100px;
  }
</style>
*/
/*
  1. 在网页中打印乘法口诀
  1 × 1 = 1
  1 × 2 = 2  2 × 2 = 4
  1 × 3 = 3  2 × 3 = 6  3 × 3 = 9
  ......
*/
// 循环行
for(let i = 1; i <= 9; i++){
  // 行内循环列
  for(let j = 1; j< i+1; j++){
    document.write(`<span>${j} × ${i} = ${i*j}<span>`);
  }
  // 换行
  document.write("<br>");
}
/*
  2. 求100以内所有的质数
  质数:是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数
*/
// 方法1
for(let i = 2; i < 100; i++){
  // 检查i是否是质数,是质数则输出
  // 创建一个变量,记录i的状态,默认i是质数
  let flag = true;
  // 获取1-i 之间的数
  for(let j = 2; j < i; i++){
    // 判断i能不能被j整除,能不是质数,否则是质数
    if(i % j === 0){
      // 进入判断,说明i不是质数,修改flag为true
      flag = false;
    }
  }
  // 是质数,打印
  if(flag){
    console.log(i);
  }
}
// 方法2
nextPrime:
for(let i = 2; i < 100; i++){
  for(let j = 2; j < i; j++){
    // 有其他因数,所以不是质数,跳出循环至标nextPrime签处,继续下一次循环
    if(i % j === 0){
      continue nextPrime;
    }
  }
  console.log(i);
}
posted @ 2023-01-13 11:54  程序员张3  阅读(45)  评论(0编辑  收藏  举报