暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Java03流程控制与数组

悦悦学姐 2021-08-20
354

第三章 流程控制与数组


【目标】


掌握boolean类型的用法


了解程序的三种结构


掌握顺序结构程序设计


掌握分支(选择)结构程序设计


掌握循环结构程序设计


掌握循环结构break,continue


掌握数组,一维数组


了解二维数组,多维数组


【内容】


一boolean类型用法



常用的关系运算符:



逻辑运算符:




二程序的三种结构


基本上所有的编程语言中,程序都有三种结构:顺序结构、分支(选择)结构、循环结构。


顺序结构:从上到下的逐行执行代码。


分支结构:根据逻辑判断,有选择的执行其中某段代码。


循环结构:根据逻辑判断,重复执行某个代码块。


三顺序结构程序设计


前面的案例代码块中没有用if、switch、for、while等,都是顺序结构。


四分支(选择)程序设计


If分支结构:


单分支if:


语法:


if(表达式){


代码块


}


说明:如果表达式为true,执行if中的代码块,否则不执行


案例1:键盘输入张浩的成绩,如果成绩大于98,就提示“老师说:不错,奖励一个MP4!”



二路分支:if-else分支


语法:


if(表达式){


代码块1;


}


else{


代码块2;


}


说明:判断表达式是否为true,如果是true,就执行代码块1,;


如果表达式为false,就执行代码块2。


案例2:从键盘输入张浩的Java成绩,如果是score>=60,就输出“恭喜你,考试及格!”,否则就输出“很遗憾,准备补考!”



案例3:从键盘输入一个年份,判断是否是闰年,如果是就输出“X年是闰年”,否则就输出“X是平年”



三目运算符(三元运算符)


语法:表达式?语句1:语句2


多重if选择结构


语法:


If(表达式1){


代码块1;


}else if(表达式2){


代码块2;


}


…..


…….//中间可以有n个elseif(){}


…..


else{


代码块n;


}


说明:


如果表达式1是真的,及执行代码块1;


如果表达式1是false,就判断表达式2,如果表达式2是true,就执行代码块2.


如果代码库2是false,就接着判断…….。


如果if都是false,则执行else中的代码块n


案例:




案例2:从键盘输入月份,输出对应的季节


3,4,5春季   6,7,8夏季    9,10,11 秋季   12,1,2冬季


例如:3月是春季



嵌套if选择结构


语法:


if(条件1){


if(条件2) {


代码块1


} else if(条件3){


代码块4;


}……


else {


代码块2


}


}else {


代码块3


}


说明:


当条件1是true的时候,判断条件2,如果条件2是true,就执行代码块1;


如果条件2是false,就执行代码块2;


如果条件1是false,就执行代码块3.


案例:学校举行运动会,百米赛跑跑入10秒内的学生有资格进决赛,根据性别分别进入男子组和女子组



switch分支结构


语法:


switch(表达式){ JDK6 中表达式的类型是byte,short,int


//JDK7中表达式的类型是byte,short,int,char


case 值1:


语句块;


break;


case 值2:


break;



……


default:


语句n;


}


说明:


程序根据switch后面括号内的表达式的值依次判断case后面的值是否匹配。如果遇到了匹配的值,就进入这个case,执行后面的代码块,直到遇到break,跳出switch操作。


如果从第一个case到最后一个case都没有匹配的值,就进入default中,执行语句n。


案例:


从键盘输入1-7,输出对应的星期几的英文单词



案例2:从键盘输入月份,输出对应的季节


3,4,5春季   6,7,8夏季    9,10,11 秋季   12,1,2冬季


例如:3月是春季



五循环结构程序设计


while


语法:


while(表达式){


循环体;


}


说明:判断表达式的值,如果是true,就执行循环体,循环体执行完后,又回到前面判断表达式的值,如果还是true,接着再执行循环体,…….直到表达式为false,结束循环。


案例1:输出”好好学习,天天向上”一百遍



案例2:编写程序实现:1+2+3+….+100的和



案例3:编程实现:输出1-100中所有能被3整除但是不能被5整除的数据


A%3== 0 && a%5 != 0



do…while


语法:


do{


循环语句;


}while(循环条件表达式);


说明:先执行循环语句,然后再判断while后面的条件,如果条件为true,就在执行do里面循环语句;在去判断while条件…..依次循环,直到表达式的值为false,循环结束。


案例1:编写程序实现:1+2+3+….+100的和



案例2:编程实现:输出1-100中所有能被3整除但是不能被5整除的数据



while和do… while区别


while(条件){


循环语句;


}


do{


循环语句;


}while(条件)


while:先判断,再执行


do..while:先执行,再判断,至少会执行一次


for循环


语法:


for(语句1;语句2;语句3){


循环操作;


}


语句1:初始化循环变量,inti = 1;


语句2:循环条件,i<=100


语句3:循环增量,如i++


案例1:编写程序实现:1+2+3+….+100的和



案例2:编程实现:输出1-100中所有能被3整除但是不能被5整除的数据



案例3:




嵌套循环



案例1:某次程序大赛,某些班有某些名学员参加,学员的成绩由用户输入,计算该班参赛学员的平均分



案例2:编写程序,打印九九乘法表




案例3:打印输出下面的图形



分析步骤:



上半部分:



六循环控制break,continue


Break:可以再switch中使用,也可以在循环结构中使用


Break案例:



结果:



Continue:结束当前这一次循环



结果:



案例:




数组的定义、初始化:



数组定义:


语法:


数据类型[]数组名字;//常用 int []  a;(推荐)


数据类型  数组名字[];//不常用 inta[];


数组初始化:


静态初始化:


静态初始化:初始化数组时由程序员指定类每个元素的值,不指定数组的长度,长度由系统自己计算.


int[]a;


a =new int[]{1,2,3};


int[]a = new int[]{1,2,3};


int[]a = {1,2,3}; 简写  最常用


案例://错误的


int[] a;


a= {1,2,3};


动态初始化:


初始化数组时程序员只指定数组长度,不指定数组元素的值,系统自动给数组分配初始值。


int[]a;


a =new int[5];


int[]a = new int[5];


系统初始值:


byte、short、int、long ----------------  0


float、double ----------------   0.0


char ---------------- ‘\u0000’ 对应空


boolean ---------------- false


String ----------------  null


引用类型:数组、类、接口----------------  null


访问数组元素


数组中每个元素都有一个下标,下标是从0开始


Int[]a = {1,2,33,34,56,7};


元素 下标 元素值


1 ----------------- 0 ---------- a[0]


2 ----------------- 1 ---------- a[1]


33----------------- 2 ----------- a[2]


34----------------- 3 ----------- a[3]


56----------------- 4 ----------- a[4]


7 ----------------- 5 ----------- a[5]


案例:



案例2:下标越界



结果:



案例3:数组初始值




访问所有元素


要输出数组中所有的元素,需要用到循环,比如for,foreach



如果数组很长怎么办?怎么知道循环多少次?


在java中数组有一个属性length,记录了数组的长度.



补充:在JDK5之后加入一个foreach循环,可以输出数组元素



数组应用


数组求和:


案例:有一组学生成绩如下:79,85,96,52,68求出这组学生成绩总和



数组求平均值:


案例:有一组学生成绩如下:79,85,96,52,68求出这组学生成绩的平均分



数组求最大值、最小值


案例:有一组学生成绩如下:79,85,96,52,68求出这组学生成绩的最高分、最低分


最大值:最小值



把上面代码合并:



查找某个元素是否在数组中


案例:有一组学生成绩如下:79,85,96,52,68,从键盘输入一个分数,查找该数组中是否包含这个分数



分段统计


eg:有一组学生成绩:78,65,96,52,88,统计出及格人数和不及格人数



eg:有一组学生成绩:78,65,96,52,88,统计出高于平均分的人数和低于平均分的人数



eg:有一组学生成绩:78,65,96,52,88,统计出90-100分,81-89分,70-79分,60-69分,0-60分的人数



数组内存分析


栈内存:基本数据类型变量值,引用类型变量的地址


堆内存:引用类型的真实值


案例一:




案例二:




案例三:




案例四:




八二维数组、多维数组


Java中没有多维数组、一维数组中放的是多个普通变量,二维数组中放的是多个一维数组,三维数组中存放的是多个二维数组….


二维数组



二维数组定义


语法:数据类型[][] 数组名;//常用 int[][] c;


数据类型  数组名[][];//不常用 intc[][];


二维数组初始化


静态初始化


初始化数组时由程序员显示的指定数组中每个元素的值,不指定数组的长度,长度由系统自己统计。


案例1:


int[][]a;


a= new int[][]{{1,2,3},{5,6,7}};


案例2:


int[][]a = new int[][]{{1,2,3},{5,6,7}};


int[][]a = {{1,2,3},{5,6,7}}; 简写最常用


案例3://错误的


int[][] a;


a =  {{1,2,3},{5,6,7}};


动态初始化:


初始化数组时程序员只指定数组长度,不指定数组元素的值,系统自动分配数组的初始化值。


案例1:


int[][] a;


a =new int[3][3];


案例2:


int[][]a = new int[3][3];


案例一:(遍历)输出二维数组中的所有元素



案例2:五子棋




三维数组



案例1:输出三位数组所有的元素



数组排序:


排序


选择排序和冒泡排序


选择排序


每一趟排序都从待排序的数组中找到最小(或最大)的一个元素,把这个最小的元素放在已排好序的数组的最后位置,直到全部排序完成。


int[]a = {12,23,9,24,15,3,18 }




选择排序,从大到小



冒泡排序


冒泡排序步骤:


比较相邻两个元素,如果第一个大于第二个,就交换他们两个。


对每一对相邻的元素做同样的工作,从开始第一对到结尾的最后一对。最后一个元素是数组中元素的最大值。


针对所有的元素重复以上的步骤,除了最后一个。


持续每次对剩下的元素重复上面的步骤,直到没有任何一个数字需要比较。




从大到小排序



文章转载自悦悦学姐,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论