《部分案例代码下载》
学习目标(全天模式)
- 能够写出九九乘法表案例
- 能够说出break和continue关键字的作用
- 能够说出while do while 和for循环的区别
- 能够说出数组的作用
- 能够通过索引获取或设置数组中的数据
- 能够通过for循环遍历数组中的数据并打印
- 能够求出一组数中的最大值
- 能够说出冒泡排序的实现思路
。。。。。。
理解上课的知识点……
ヾ(๑╹◡╹)ノ”双重for循环的练习
1 | //1 打印9*9的五角星★正方形 |
break和continue
break: 如果循环遇到了break,就立刻结束整个循环,循环结束。执行循环之后的代码
continue: 如果循环遇到了continue,就立刻结束本次循环,继续执行下一次循环(直接到i++的地方)。
例子:
1 | for(var i = 1; i <= 5; i++) { |
ヾ(๑╹◡╹)ノ” 思考一下输出结果是什么?
1 | for(var i = 1; i <=10; i++) { |
ヾ(๑╹◡╹)ノ” break和continue的练习
只是为了练习break和continue
1 | //1. 求1-100之间不能被7整除的整数的和(用continue) |
————————
循环的小结
- for循环:用的最多,适用于明确循环次数的情况
- while循环:适用于不明确循环次数情况
- do…while循环:适用于无论如何都需要执行一次代码的时候(很少)
数组(Array)
数组:就是有序的值的集合
为什么要学习数组
需求: 现在需要存储一个班同学的名字
如果使用简单数据类型存储,一个变量存一个,需要多个变量
管理起来非常的麻烦,两个班呢?多个班呢?当数据量大时,变量多的要上天
1
2
3
4
5var name1 = "名字1";
var name2 = "名字2";
var name3 = "名字3";
var name4 = "名字4";
......如果使用数组存储,只需要一个变量即可
一个数组中可以存储大量的数据,变量只需要一个,并且之后管理操作也很方便
1
var arr = ['名字1','名字2','名字3','名字4','名字5',......]
创建数组方式
字面量(直接量)
从字面上,就能直接看出类型的量,浏览器直接认识
1,true,’abc’,undefined,null——》[]:表示一个数组
1
2
3
4var arr = []; // 创建了一个空数组(没有数据的数组)
var arr = ['张飞','赵云','关羽','刘备','吕布']; // 创建了存了数据的数组
var arr = [123];// 创建了一个存了123这个数据的数组
console.log(arr);注意点: 数组中可以存任意类型的数据,但是规范一般存储相同类型的数据
构造函数的方法(了解,一般不用)
函数还没学,先知道写法即可。并且一般不用。
1
2
3
4
5var arr = new Array(); // 创建了一个空数组(没有数据的数组)
var arr = new Array('张飞','赵云','关羽','刘备','吕布'); // 创建了存了数据的数组
//------------------有一个坑
var arr = new Array(123);// 创建了一个数组,并且占了123个位置,浪费空间
console.log(arr);
数组长度与下标
需求: 用一个数组,存储3个人:刘备、关羽、张飞
1 | var arr = ["刘备","关羽","张飞"]; |
数组的长度 : 通过arr.length属性,可以获取数据的长度
类似于字符串长度的属性
1 | var arr = ["刘备","关羽","张飞"]; |
数组的下标: 数组中的每一项,都有一个唯一的下标与之对应
也有人把下标叫做索引
ヾ(๑╹◡╹)ノ” 数组类似于火车
注意点:
- 数组下标从0开始
- 数组下标的最大值:
arr.length-1
数组的取值与存值
数组中的数据可以通过下标进行取值与赋值
类似于列车长,可以查看每一节车厢里是谁,也可以给车厢里换人坐。
数组的取值:
1 | // 语法: 数组名[下标] |
数组的存值(改值):
1 | // 语法: 数组名[下标] = "新的值"; |
————————
数组最后添加元素的方法:
为了不开很多空的车厢,一般会在数组的最后添加一项
arr[arr.length] = 值:在数组最后添加一项
随着数组的长度变长,arr.length也在变化,用于比下标多1
arr.push(值):专门用于给数组的最后添加一项(常用)
ヾ(๑╹◡╹)ノ” 数组添加元素的练习
1 | //1. 把1-100之间所有的数,放到一个空数组中 |
数组的遍历
遍及所有项,从数组的第一项,访问到最后一项
low写法:
1 | var arr = ['刘备', '关羽', '张飞', '赵云']; |
遍历的写法:
注意点:从第一项访问到最后一项
- 第一项:下标是0
- 最后一项:arr.length-1
1 | for(var i = 0; i <= arr.length-1; i++) {// 下标从0~arr.length-1 |
以下作为思考的作业
ヾ(๑╹◡╹)ノ”数组遍历的练习1
1 | var arr = [298, 1, 3, 4, 6, 2, 23, 88,77,44]; |
————————
ヾ(๑╹◡╹)ノ”数组遍历的练习2
1 | var arr = ["a", "bb","ccc","dddd"]; |
冒泡排序
冒泡排序法属于算法的范畴,同学们一开始想不到很正常,不要纠结怎么想出来的,因为这都是前人长久的思考不断优化得来的。
关键点在于听懂思路。
排序:让一组没有顺序的数字,经过排列,排成一组有顺序的数字
[3,2,4,1,5,7,9,8,6]
——》[1,2,3,4,5,6,7,8,9]
——》从小到大排序(升序)
冒泡:指的是排序的方式,小的在前面,大的在后面
思路:两两比较,让较大的放到后面,一趟下来可以求出一个最大值。
冒泡排序法的铺垫
冒泡排序:两两比较,让大的数排到后面去!!
交换两个数的值
1
2
3
4
5
6
7var num1 = 11;
var num2 = 22;
var temp = num1;
num1 = num2;
num2 = temp;
console.log(num1);
console.log(num2);让数组中的最大值,跑到最后
遍历数组
让 arr[i] 和 arr[i+1] 比较
让当前元素与后一个比较
如果 arr[i] > arr[i+1],表示前面的比后面的大,此时交换位置(往后沉)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// 2、 让数组中的一个最大值,跑到最后
// 1、遍历数组
// 2、让 arr[i] 和 arr[i+1] 比较
// 3、如果 arr[i] > arr[i+1], 表示前面的比后面的大,此时交换位置
var arr = [7, 6, 5, 4, 3, 2, 1];
for (var i = 0; i < arr.length - 1; i++) {
// 让 arr[i] 和 arr[i+1] 比较
if (arr[i] > arr[i + 1]) {
// 交换位置
var temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
console.log(arr);
冒泡排序初级版本
找最大值的代码多执行几遍(0~arr.length-1)即可
双重for循环
1 | var arr = [7, 6, 5, 4, 3, 2, 1]; |
————————
冒泡排序的中级版本
优化点:每一趟比较之后,都可以比上一趟少比较一次
1 | var arr = [7, 6, 5, 4, 3, 2, 1]; |
假设成立法:
对于某一些问题来说,可以先假设结果为多少,然后找打脸的情况
1 | // 1. 需求: 判断这个数组是否全是偶数 |
冒泡排序法的高级版本
优化点:以下特殊情况
- 如果数组本身排好序的,那么不需要排很多次
- 如果数组第一趟下来就排好了,后面的不需要排了
假设成立法:假设这一趟已经排好了(那么一趟下来不会交换),设置变量flag=true,当交换的时候设置flag=false。
- 如果真的排好了,一趟下来flag还是true,此时结束循环break
- 如果还没排好,一趟下来flag会改成false,此时不执行break
1 | var arr = [7, 6, 5, 4, 3, 2, 1]; |
函数基础知识
为什么要学习函数
在写代码的时候,有一些常用的代码需要书写多次,如果直接复制粘贴的话,会造成大量的冗余代码。
此时可以利用函数,将一段重复的代码进行封装(放到一块)
1 | // 第一天, 讲一遍故事 |
函数的好处:函数可以一次声明,多次调用!!
————————
函数的声明与调用
函数的声明语法:
1 | function 函数名(){ |
函数调用的语法:
1 | 函数名(); |
例子
1 | // 声明一个讲故事的函数 |
特点:
函数可以把一段重复的代码进行封装
函数一次声明,可以多次调用
类似于录音机录了一次之后,可以播放很多次
函数只声明,函数体是不会执行的
类似于录音机有音乐,不会自己播放
ヾ(๑╹◡╹)ノ” 函数声明与调用练习
1 | // 1. 封装一个打招呼的函数 |