三种基本流程结构:
顺序结构
分支结构
循环结构
顺序结构就是程序从上到下一行一行执行的结构,中间没有判断和跳转,直到程序结束。
public class Test{
public static void main{
System.out.println(1);
System.out.println(2);
System.out.println(3);
}
}
分支结构又称为选择结构,根据条件,选择性地执行某段代码
2.1 if单分支语句
语法:
if(条件表达式){
语句块;
}
条件表达式结果为boolean类型,当表达式结果为true,则执行语句块;否则什么都不执行
例:
public class Test{
public static void main(String[] args){
int a = 10;
int b = 10;
if(a > b){
System.out.println("a大于b");
}
if(a == b){
System.out.println("a等于b");
}
}
}
2.2 if 双分支语句
语法:
if(条件表达式){
语句块A;
}else{
语句块B;
}
解释:
条件表达式结果为boolean类型,当表达式结果为true,则执行语句块A;否则执行语句块B
public class IfDemo{
public static void main(String[] args){
int a = 10;
int b = 10;
if(a == b){
System.out.println("a 等于 b");
}else{
System.out.println("a 不等于 b");
}
System.out.println("...................");
if(a> b){
System.out.println("a 大于 b");
}else{
System.out.println("a 于不大 b");
}
System.out.println(".....................");
}
}
2.3 if 多分支语句
语法:
if(条件表达式A){
语句块A;
}else if (条件表达式B){
语句块B;
}else if (条件表达式C){
语句块C;
}else if(条件表达式N){
语句块N;
}else{
语句块N+1;
}
解释:
所有的条件表达式结果都是boolean类型
如果条件表达式A结果为true,则执行语句块A,否则去判断条件表达式B
如果条件表达式B结果为true,则执行语句块B,否则去判断条件表达式C
....
如果所以的条件表达式结果都为flase,则执行语句块N+1
例:
public class Test{
public static void main(String[] args){
int score = 70;
if(score >= 90){
System.out.println("优秀");
}else if (score >=80 && score <= 89){
System.out.println("良好");
}else if(score >= 60 && score <= 79){
System.out.println("中等");
}else if(score < 6o){
System.out.println("差");
}else{
System.out.println("");
}
}
}
2.4 嵌套if
为什么使用嵌套if?
问题:学校举行运动会,百米赛跑跑入10秒内的学生有资格进决赛,根据性别分别进入男子组和女子组
分析:
要判断是否能够进决赛
在确定进入决赛的情况下,还要判读是进入男子组还是女子组
解决:
使用嵌套if选择结构
public class Test{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
char gender = sc.next();
if(score < 10){
if(gender.equals("男")){
System.out.println("进入男子组");
}else if(gender.equals("女")){
System.out.println("进入女子组");
}
}else{
System.out.println("淘汰");
}
}
}
为了使if结构更加清晰,避免执行错误,应该把每个if或else包含的代码块都用大括号括起来
相匹配的一对if和else应该左对齐
内层的if结构相对于外层的if结构要有一定的缩进;
2.5 switch语句
语法:
switch(表达式){
case值1:
语句块;
break;
...
case值N:
语句块;
break;
default:
语句块default;
}
解释:
根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或switch-case结构末尾结束为止
表达式在这里其实是一个值:但是必须是byte,short,int,char,枚举类型(JDK5.0新增),String(JDK7.0新增)其中的一种
break 不是语法中固定的,可以加也可不加,但是如果为了打断switch的贯穿性,需要结合break使用
default 块顺序可以变动,但是要注意其执行顺序。通常,default块放在末尾,也可以省略;但是如果default块放在前面,推荐添加break
case 的顺序无所谓,case之后只能声明常量,不能声明范围
程序会使用表达值从上到下跟case后面的值进行比较,如果相等,则执行对应的语句块,否则继续向后对比:
如果都不相等,则执行default
练习题:
对学生成绩大于60分的,输出“合格”。低
于60分的,输出“不合格”。
注:switch-case结构来实现;
public class Test{
public static void main(String[] args){
int score = 75;
switch(score/10){
case 1:
case 2
case 3:
case 4:
case 5:
System.out.println("不合格");
break;
case 6:
case 7:
case 8:
case 9:
case 10:
System.out.println("合格");
break;
}
}
}
2.6 比较switch和多重if选择结构
相同点:
都是用来处理多分支的结构
不同点:
switch选择结构:只能处理等值条件判断的情况,而且条件必须是整形变量或字符型变量
多重 if 选择结构:没有switch选择结构的限制,特别适合某个变量处于某个连续区间时的情况
if 在应用中更为常见,有时 switch 结构更清晰
注:凡是可以使用switch-case 的结构,都可以使用if-case;反之不成立
在某些条件满足的情况下,反复执行特定代码的功能
有 while ,do...while,for三种循环语句
注:JDK1.5提供了 foreach循环,方便的遍历集合,数组元素
3.1循环分类
顺序结构或分支结构的程序语句只能被执行一次。如果要同样的操作执行多次,就需要使用循环结构
循环语句分类
while循环
do-while循环
for循环
单层循环
双层循环
增强for循环(foreach)
嵌套循环
循环语句的四个组成部分
初始化部分
循环条件部分
循环体部分
迭代部分
3.2 while循环
语法:
初始化部分
while(循环条件部分){
循环体部分;
迭代部分;
}
解释:
条件表达式返回值类型为boolean类型,只要条件表达式的结果为true,则一直执行语句块
特点:
先判断,再执行
注:
不要忘记声明 迭代部分。否则,循环将不能结束,变成死循环
for循环和while循环可以相互转换,区别点:for循环和while循环的初始化变量作用域不同
public class Test{
public static void main(String[] args){
int sum = 0;
int i = 0;
while(i <= 10){
sum += i;
i ++;
}
System.out.println(sum);
}
}
练习题:
问题:如何用程序描述下面这个故事呢?
为了帮助张浩尽快提高成绩,老师给他安排了每天的学习任务,
其中上午阅读教材,学习理论部分,下午上机编程,掌握代码部分。
老师每天检查学习成果。如果不合格,则继续进行
分析:使用while循环的步骤
1、分析循环条件和循环操作
2、套用while语法写出代码
3、检查循环是否能够退出
public class Test{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out,println("及格了吗?(y/n):")
String answer = sc.next();
while(answer.equals("y" == flase)){
System.out,println("上午阅读材料!");
System.out,println("下午上机编程!");
System.out,println("及格了吗?(y/n):");
answer = sc.next;
}
System.out,println("完成学习任务!")
}
}
3.3 do...while循环
语法:
初始化部分;
do{
循环部分
迭代部分
}while(循环条件部分);
解释:
先执行do对应的语句块,然后再判断循环条件,只要循环条件满足,则一直执行循环体,否则结束循环
特点:
先执行,再判断;do...while循环至少执行一次循环体
public class DoWhileLoop{
public static void main(String[] args){
int sum = 0;
int i = 0;
do{
sum += i;
i++;
}while(i<= 10);
System.out.println(sum);
}
}
为什么需要do-while循环?
经过几天的学习,老师给张浩一道测试题,让他先上机编写程序完成,
然后老师检查是否合格。如果不合格,则继续编写。.…...
do{
System.out.println("上机编写程序:");
System.out.println("合格了吗?y/n"?);
answer = sc.next();
System.out.println(" ");
}while(!"y".equals(answer));
System.out.println("恭喜你通过了测试!");
while 和 do-while的区别:
执行次序不同:
while先判断,再执行;do-while 先执行,再判断
初始情况不满足循环条件时:
while循环一次都不会执行
do-while循环不管任何情况都至少执行一次
int number1 = 10;
while(number1 > 10){
System.out.println("hello : while");
number1--;
}
int number2 = 10;
do{
System.out.println("hello: do-while");
number2--;
}while(number2 > 10);
3.4 for循环
语法:
for(初始化循环条件;循环条件表达式;迭代部分){
循环操作;(循环体)
}
解释:
1,先执行初始化循环条件
2,使用初始表达值进行条件判断,如果判断为true,则执行循环操作;否则结束循环
3,进行迭代
4,循环迭代可以在()里面省略,在循环体里面进行迭代也可
练习题:
循环输入某同学结业考试的5门课成绩,并计算平均分
1、分析循环条件和循环操作
2、套用for语法写出代码
3、检查循环是否能够退出
public class Test{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int sum = 0;
int score;
for(int i = 0 ; i < 5 ; i++){
score = sc.nextInt();
sum += score;
}
int average = sum / 5;
System.out.println(average);
}
}
三种循环对比:
执行顺序:
先判断,后执行:while、for
先执行,后判断:do-while
适用:
循环次数确定:for
循环次数不确定:while,do-while
3.5循环嵌套
将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for,while,do...while都可以作为外层循环或内层循环
实质上,嵌套循环就是把内部循环当成外层循环的循环体。当内层循环的循环条件为flase时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次循环
设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次
打印等腰三角形
/*
*
***
*****
*******
*********
*/
public class Text{
public static void main(String[] args){
for(int i = 1; i <= 5;i++){
for(int j =5 ; j >= i ; j--){
System.out.println(" ");
}
for(int k = 1; k <= i*2-1 ; k++){
System.out.println("*");
}
System.out.println();
}
}
}
总结规律:
第一个(外层)for循环作用:控制行数
第二个(内层)for循环作用:控制列数
break 结束所在循环
一是使switch语句中终止于某个case 二是使一个循环立即结束
continue 跳过本次循环,继续下一次循环
在while或do-while循环中,会使流程跳转至条件表达式;
在for语句中,continue语句会跳转至表达式2;
return 结束整个方法;