一、双重for循环
语法:
for (初始化条件;判断;条件改变){ for (初始化条件2;判断2;条件改变2){ 循环体 } }
双重for循环是比较常用的循环,需要注意的就是执行顺序,先执行外层for一次,然后内层for要遍历一次(就是内层for条件为假的时候)在执行下一次外层for。
比如一个经典案例:打印九九乘法表
for (int i=1;i<=9;i++){
for (int j=1; j<=i;j++){
System.out.print(j +"x"+ i +"="+i*j + " ");
}
System.out.println("");
}
结果:
注意:print 和println 的区别是后者输出后会自动换行;
在双重循环中使用break和continue
break
在双重循环中,break跳出的是离他最近的for,(写在内层就跳过内层,写在外层就跳出外层)
跳过内层
for (int i=0;i<3;i++){
System.out.println("i:"+i);
for (int j=0; j<3;j++){
if (j==2){
break;
}
System.out.println("j"+j);
}
}
跳过外层
for (int i=0;i<3;i++){
System.out.println("i:"+i);
if (i==2){
break;
}
for (int j=0; j<3;j++){
System.out.println("j"+j);
}
}
break标签
当执行到break时,结束的是外层(我的理解是,相当于给外层for取了一个别名,break结束的就是外层的别名)
continue
continue 和 baerk 的用法相同,只是跳过这次循环
for (int i=0;i<3;i++){
System.out.println("i:"+i);
if (i==2){
continue;
}
for (int j=0; j<3;j++){
System.out.println("j"+j);
}
}
输出:
continue标签
和break一样,continue也可以用标签,用法完全相同。
二、数组
数组的定义
数组是一种容器,可以同时存放多个(同类型的数据)数据, 数据按照一定的顺序进行排列
在内存开辟一块连续的地址空间
数组声明:
数据类型 [ ] 数组名;
数据类型 数组名 [ ];
int [] arr;
int arr[];
数组的术语
数组名
下标,从0开始
数据元素:数组中存储的值
数组的赋值
静态赋值
数据类型[] 数组名 = {数据元素, 数据元素, 数据元素 .... };
数组的长度,由系统根据数据元素的个数来创建,且按照顺序进行存储
动态赋值
数据类型[] 变量名 = new 数据类型[ 长度 ];
// 动态初始化的长度,由用户指定 ; 数据有默认值
int[] scores = new int[3];
// 左边
int 数组存储的数据类型
[] 代表它是一个数组
scores 数组名//右边
new 创建一个数组 分配内存
int 数据元素的类型为int
[] 说明是一个数组
3 说明数据的长度是3
注: new数组时, 会有默认值
整形基本数据类型 byte short int long默认值都为0
浮点型基本数据类型 float double 默认值为0.0
字符基本数据类型 char 默认值是 ‘ ’ 空格 unicode码为 \u0000
boolean 基本数据类型默认值为false
引用类型的默认值 ,都为null