十六、循环结构
- 循环结构的作用:
- 减少代码的重复编写、灵活地控制程序的执行
(一)for循环
控制一段代码反复执行很多次
格式:
for(初始化语句;循环条件;迭代语句){
循环体语句(重复执行的代码);
}
示例:
// 输出3次HelloWorldfor(inti=0;i<3;i++){System.out.println("Hello World");}
(二)while循环
格式:
初始化语句;
while(循环条件){
循环体语句(被重复执行的代码);
迭代语句;
}
示例:
inti=0;while(i<3){System.out.println("Hello World");i++;}
(三)do-while 循环
格式:
初始化语句;
do{
循环体语句;
迭代语句;
}while(循环条件);示例:
inti=0;do{System.out.println("Hello World! ");i++;}while(i<3);
(四)三种循环的使用小结
- for循环和while循环功能上是完全一样的,for能解决的while也能解决,反之亦然。
- 使用规范:知道循环几次,用for;不知道循环几次,建议用while。
- for循环中,控制循环的变量只在循环中使用。while循环中,控制循环的变量在循环后还可以继续使用。
(五)死循环
可以一直执行下去的一种循环,如果没有干预不会停下来。
写法
for:
for(;;){System.out.println("Hello World1");}while(经典写法)
while(true){System.out.println("Hello World2");}do
do{System.out.println("Hello World3");}while(true);
(六)循环嵌套
循环中又包含循环
for(inti=0;i<3;i++){for(intj=0;j<5;j++){System.out.println("我爱你");}}嵌套循环的特点
- 外部循环每循环一次,内部循环会全部执行完一轮。
(七)跳转关键字
- break
- 跳出并结束当前所在循环的执行。
- 只能用于结束所在循环,或者结束所在switch分支的执行。
- continue
- 用于跳出当前循环的当次执行,直接进入循环的下一次执行。
- 只能在循环中使用。
十七、数组
(一)一维数组
数组是什么?
- 数组是一个数据容器,可用来存储一批同类型的数据。
数组的定义格式:
静态初始化数组,定义时已经确定了数据
数据类型[] 数组名 = {元素1,元素2,元素3,….}
int[]arr={12,24,36};完整格式
数据类型[] 数组名 = new 数据类型[] {元素1,元素2,元素3,….}
int[]arr=newint[]{12,24,36};注意
数据类型[] 数组名也可以写成数据类型 数组名[]
数组的访问
数组名[索引]
System.out.println(arr[0]);//12System.out.println(arr[1]);//24arr[1]=100;获取数组的长度(元素个数)
System.out.println(arr.length);//3动态初始化数组
定义数组时先不存入具体的元素值,只确定数据存储的数据类型和数组的长度
==数据类型[] 数组名 = new 数据类型[长度];==int[]arr=newint[3];元素默认值规则:
数据类型 明细 默认值 基本类型 byte、short、char、int、long 0 float、double 0.0 boolean false 引用类型 类、接口、数组、String null 数组的遍历
示例:
int[]arr={20,30,40,50};for(inti=0;i<arr.length;i++){System.out.println(arr[i]);}数组的综合应用
- 实现简易版斗地主游戏的做牌和洗牌功能。
我们需要:
做牌:创建54张扑克牌(包含大小王)并存入数组
洗牌:打乱数组中牌的顺序- 代码实现:
packagecom.zzh.loop;importjava.util.Random;publicclass数组的综合应用{publicstaticvoidmain(String[]args){// ========== 第一步:做牌(创建54张扑克牌)==========// 定义花色数组:方块♦、梅花♣、红桃♥、黑桃♠String[]colors={"♦","♣","♥","♠"};// 定义点数数组:A, 2, 3, ..., KString[]numbers={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};// 创建一个长度为54的String数组,用于存储所有扑克牌String[]cards=newString[54];// 使用索引变量记录当前存放到第几张牌intindex=0;// 使用嵌套循环生成52张普通牌(4种花色 × 13种点数)for(inti=0;i<numbers.length;i++){// 外层循环遍历点数for(intj=0;j<colors.length;j++){// 内层循环遍历花色// 将点数和花色拼接成一张牌,例如:"♦3"、"♣A"cards[index]=numbers[i]+colors[j];index++;// 每存放一张牌,索引加1}}// 添加两张王牌:小王和大王cards[index]="小";index++;cards[index]="大";// 打印做牌结果,查看54张牌是否创建成功System.out.println("========== 做牌完成,共54张牌 ==========");for(inti=0;i<cards.length;i++){System.out.print(cards[i]+" ");// 每行打印10张牌,方便查看if((i+1)%10==0){System.out.println();}}System.out.println();// 换行// ========== 第二步:洗牌(打乱牌的顺序)==========// 创建Random对象,用于生成随机数Randomrandom=newRandom();// 使用循环遍历每一张牌for(inti=0;i<cards.length;i++){// 随机生成一个索引位置(范围:0到53)intrandomIndex=random.nextInt(cards.length);// 交换当前牌和随机位置的牌Stringtemp=cards[i];// 临时保存当前牌cards[i]=cards[randomIndex];// 将随机位置的牌放到当前位置cards[randomIndex]=temp;// 将当前牌放到随机位置}// 打印洗牌结果,查看牌的顺序是否被打乱System.out.println("\n========== 洗牌完成 ==========");for(inti=0;i<cards.length;i++){System.out.print(cards[i]+" ");// 每行打印10张牌,方便查看if((i+1)%10==0){System.out.println();}}System.out.println();// 换行}}
(二)二维数组
二维数组是什么?
- 数组中每个元素都是一个一维数组,这个数组就是二维数组。
静态初始化
- 数据类型[][] [][] 数组名 = new 数据类型[][]{元素1,元素2,元素3,……};
- 示例:
int[][]arr=newint[][]{{12,24,36},{666,888},{10,20,30},{999}};动态初始化
- 数据类型[][] 数组名 = new 数据类型[长度1][长度2];
- 示例:
int[][]arr=newint[3][5];二维数组的访问
- 数组名称[行索引]
- 数组名称[行索引][列索引]
二维数组的遍历
- 示例:
for(inti=0;i<arr.length;i++){for(intj=0;j<arr[i].length;j++){intdata=arr[i][j];System.out.print(data+"\t");}System.out.println();}