Lesson 06
数组Arrays
什么是
一堆同类型变量
案例对比
使用前
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 int number = Console.readInt(); int digit1, digit2, digit3; digit1 = number % 10;number = number / 10; digit2 = number % 10;number = number / 10; digit3 = number % 10;number = number / 10; Console.println(digit3);Console.println(digit2);Console.println(digit1);
使用后
1 2 3*4 5*6 7 8*9 10 11*12 13 14*15*16*int number = Console.readInt(); int[] digits = new int[3]; digits[0] = number % 10;number = number / 10; digits[1] = number % 10;number = number / 10; digits[2] = number % 10;number = number / 10; Console.println(digits[2]);Console.println(digits[1]);Console.println(digits[0]);
效果
一气声明多个数据格
数组声明及创建
标准格式
<数组变量声明> = <数组创建>; <元素类型>[] <数组变量名> = new <元素类型>[<数组尺寸>];
int[] digits = new int[3];
兼容格式
<元素类型> <数组变量名>[] = new <元素类型>[<数组尺寸>];
int digits[] = new int[3];
默认值
通过 new
创建的数组, 每个数据格里都是该类型的默认值
类型 | 默认值 |
---|---|
int | 0 |
double | 0.0 |
boolean | false |
元素Elements
管数组里的每个变量叫元素
索引Index
数组使用索引定位数据格
格式
1<数组名>[<索引值>]
样例
1 2 3 4 5 // 赋值digits[2] = number % 10; // 取值Console.println(digits[2]);
索引范围
索引值范围从 0 开始 到 尺寸 - 1
数组越界
1 2!3!int[] digits = new int[5];System.out.println(digits[5]);System.out.println(digits[-1]);
访问越界的索引会导致运行时报错
强类型数组
数组里的每个元素的类型都是一样的
1!digits[0] = 3.7;
数组字面量
格式
{<元素字面量1>, <元素字面量2>, ..., <元素字面量n>}
样例
int[] digits = {2, 7, 3, 8, 4};
长度不可改
一旦创建时确定了数组的长度, 之后就不能改
如果需要, 只能造一个新的
1 2 3 int[] arr1 = new int[3];...int[] arr2 = new int[5];
一维数组 和 条件语句 的关系
使用前
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 int number = Console.readInt(); String code = "";switch (number) { case 0: code = "-----"; break; case 1: code = ".----"; break; case 2: code = "..---"; break; case 3: code = "...--"; break; case 4: code = "....-"; break; case 5: code = "....."; break; case 6: code = "-...."; break; case 7: code = "--..."; break; case 8: code = "---.."; break; case 9: code = "----."; break;}Console.println(code);
使用后
1*2*3 4 5*6 7 String[] codes = {"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----."}; int number = Console.readInt();String code = codes[number]; Console.println(code);
特性
分支结构的判断是一个变量
值是连续的
循环Loops
For 语句
作用
用于机械式重复一段代码
案例对比
使用前
1 2 3 4 String name = "ZZAX";Console.println(name);Console.println(name);Console.println(name);
使用后
1 2*3 4*String name = "ZZAX";for (int i = 0; i < 3; i++) { Console.println(name);}
语法
for (<初始化>; <维持条件>; <改变>){ <statements> }
维持条件部分 必须为 布尔值表达式
执行顺序
1 for (2; 3; 4){ 5 } 6
1 23 543 543 543 ... 543 6
3 有没有可能不执行 ?
A. 有, B. 没有
4 有没有可能不执行 ?
A. 有, B. 没有
5 有没有可能不执行 ?
A. 有, B. 没有
标准 for 语句
一般
for (int i = 3; i > 1; i--){ ... }
标准
for (int i = 0; i < <次数>; i++){ <statements> }
唯一可以变的,就是 i
的名字,和 次数。
利用 i 值
1 2 3 for (int i = 0; i < 3; i++) { Console.println(i);}
for 语句技巧
输出 9 - 0
1. 先写出不循环的版本
1 2 3 4 5 6 7 8 9 Console.println(9);Console.println(8);Console.println(7);Console.println(6);Console.println(5);Console.println(4);Console.println(3);Console.println(2);Console.println(1);
2. 准备模板
1 2 3 for(int i = 0; i < <次数>; i++) { <statements>}
3. 填次数
次数
9 次
填进去
1*2 3 for(int i = 0; i < 9; i++) { <statements>}
4. 填相同
相同
1Console.println(<不同>);
填进去
1 2 3 for(int i = 0; i < 9; i++) { Console.println(<不同>);}
5. 找规律 填公式
规律
v: 9 8 7 6 5 4 3 2 1 i: 0 1 2 3 4 5 6 7 8 v = 9 - i
填进去
1 2 3 4 for(int i = 0; i < 9; i++) { int value = 9 - i; Console.println(value);}
挑战
输出 1 3 5 7 9
for 语句 与 变量作用域
语句头
for 语句头的初始化部分的 变量 在最后一次碰到回 大括号的时候死
循环期间一直保留
语句内
for 语句里的 变量 每次撞到 回大括号 都死一次
每次循环都是新的
注意
在 for 语句里 可以用到的变量有
for 语句外面的
for 语句头里声明的
for 语句里声明的
for 与 数组 联合应用的案例
使用前
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 int number = Console.readInt(); int[] digits = new int[3]; digits[0] = number % 10;number = number / 10; digits[1] = number % 10;number = number / 10; digits[2] = number % 10;number = number / 10; Console.println(digits[2]);Console.println(digits[1]);Console.println(digits[0]);
使用后
1 2 3 4 5 6 7 8 9 10 11 12 int number = Console.readInt(); int[] digits = new int[3]; for (int i = 0; i < 3; i++) { digits[i] = number % 10; number = number / 10;} for (int i = 0; i < 3; i++) { Console.println(digits[2 - i]);}