java--流程控制
一.流程控制
在声明式的编程语言中,流程控制指令是指会改变程序运行顺序的指令,可能是运行不同位置的指令,或是在二段(或多段)程序中选择一个运行。
java中的流程控制分为:顺序结构,选择结构,循环结构
二.顺序结构
程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
package com.itheima_01; /* * 顺序结构:从上往下,依次执行 */ public class OrderDemo { public static void main(String[] args) { System.out.println("开始"); System.out.println("语句A"); System.out.println("语句B"); System.out.println("语句C"); System.out.println("结束"); } }
三.选择结构
选择结构
也被称为分支结构。
选择结构有特定的语法格式,我们必须按照它的基本格式来编写代码。
Java语言提供了两种选择结构语句
if语句
switch语句
1.if语句
/* if语句有三种格式 1.if语句第一种格式: if(关系表达式) { 语句体 } 执行流程 首先判断关系表达式看其结果是true还是false 如果是true就执行语句体 如果是false就不执行语句体 2.if语句第二种格式: if(关系表达式) { 语句体1; }else { 语句体2; } 执行流程 首先判断关系表达式看其结果是true还是false 如果是true就执行语句体1 如果是false就执行语句体2 3.if语句第三种格式: if(关系表达式1) { 语句体1; }else if (关系表达式2) { 语句体2; } … else { 语句体n+1; } 执行流程 首先判断关系表达式1看其结果是true还是false 如果是true就执行语句体1 如果是false就继续判断关系表达式2看其结果是true还是false 如果是true就执行语句体2 如果是false就继续判断关系表达式…看其结果是true还是false … 如果没有任何关系表达式为true,就执行语句体n+1。 */
示例代码:
package com.company; import java.util.Scanner; /* * 键盘录入两个数据,获取这两个数据的较大值 键盘录入学生考试成绩,请根据成绩判断该学生属于哪个级别 90-100 优秀 80-90 好 70-80 良 60-70 及格 60以下 不及格 */ public class IfTest { public static void main(String[] args){ //1.新建立一个键盘录入的对象 Scanner sc = new Scanner(System.in); // 2.接收数据 // while (true){ 加上这个可以循环使用 System.out.println("请输入学生的成绩:"); int score = sc.nextInt(); if(score>=90 && score<100){ System.out.println("优秀"); }else if (score>=80 && score<90){ System.out.println("好"); }else if (score>=70 && score<80){ System.out.println("良"); }else if (score>=60 && score<70){ System.out.println("及格"); }else if (score<60){ System.out.println("不及格"); }else { System.out.println("输入的成绩有误"); } // } } }
2.switch语句
/* switch语句格式: 1.switch(表达式) { case 值1: 语句体1; break; case 值2: 语句体2; break; … default: 语句体n+1; break; } 2.格式解释 switch表示这是switch语句 表达式的取值:byte,short,int,char JDK5以后可以是枚举 JDK7以后可以是String case后面跟的是要和表达式进行比较的值 语句体部分可以是一条或多条语句 break表示中断,结束的意思,可以结束switch语句 default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。 3.执行流程 首先计算出表达式的值 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。 */
示例代码:
package com.company; import java.util.Scanner; /* * 需求: * 根据键盘录入的数值1,2,3,…7输出对应的星期一,星期二,星期三…星期日。 */ public class SwitchDemo { public static void main(String[] args) { //创建键盘录入对象 Scanner sc = new Scanner(System.in); //接收数据 System.out.println("请输入一个数字(1-7):"); int weekday = sc.nextInt(); //switch语句实现选择 switch(weekday) { case 1: System.out.println("星期一"); break; case 2: System.out.println("星期二"); break; case 3: System.out.println("星期三"); break; case 4: System.out.println("星期四"); break; case 5: System.out.println("星期五"); break; case 6: System.out.println("星期六"); break; case 7: System.out.println("星期日"); break; default: System.out.println("你输入的数字有误"); break; } } }
四.循环结构
/* 循环语句的组成 1.初始化语句: 一条或者多条语句,这些语句完成一些初始化操作。 2.判断条件语句: 这是一个boolean 表达式,这个表达式能决定是否执行循环体。 3.循环体语句: 这个部分是循环体语句,也就是我们要多次做的事情。 4.控制条件语句: 这个部分在一次循环体结束后,下一次循环判断条件执行前执行。通过用于控制循环条件中的变量,使得循环在合适的时候结束。 Java提供了三种循环结构语句: 1.for, 2.while, 3.do…while */
1.for循环
基本格式:
/* * for循环语句格式: * for(初始化语句;判断条件语句;控制条件语句) { * 循环体语句; * } * * 执行流程: * A:执行初始化语句 * B:执行判断条件语句,看结果是true还是false * 如果是true,就继续执行 * 如果是false,就结束循环 * C:执行循环体语句 * D:执行控制条件语句 * E:回到B继续 * * */
示例一:
package com.company; /* * 需求: * 1.求100以内所有的整数和 * */ public class ForDemo { public static void main(String[] args){ int sum = 0; for(int i =1;i<=100;i++){ if(i%2==0){ sum+=i; } } System.out.println("sum:"+sum); } }
示例二:
package com.company; /* * 需求:在控制台输出所有的”水仙花数” * * 分析: * 什么是水仙花数呢? * 所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。 * 举例:153就是一个水仙花数。 * 153 = 1*1*1 + 5*5*5 + 3*3*3 * * A:三位数其实就告诉了我们水仙花数的范围 * 100-999 * B:如何获取一个数据的每一个位上的数呢? * 举例:我有一个数据153,请问如何获取到个位,十位,百位 * 个位:153%10 = 3; * 十位:153/10%10 = 5; * 百位:153/10/10%10 = 1; * 千位:... * 万位:... * C:让每个位上的立方和相加,并和该数据进行比较,如果相等,就说明该数据是水仙花数,在控制台输出 */ public class ForDemo01 { public static void main(String[] args) { //通过循环获取到每一个三位数 for(int x=100; x<1000; x++) { //获取个位,十位,百位 int ge = x%10; int shi = x/10%10; int bai = x/10/10%10; //让每个位上的立方和相加,并和该数据进行比较,如果相等,就说明该数据是水仙花数,在控制台输出 if((ge*ge*ge+shi*shi*shi+bai*bai*bai) == x) { System.out.println(x); } } }
示例三:
package com.company; /* * 需求:统计”水仙花数”共有多少个 * * 分析: * A:定义统计变量,初始化值是0 * B:获取三位数,用for循环实现 * C:获取三位数的个位,十位,百位 * D:判断这个三位数是否是水仙花数,如果是,统计变量++ * E:输出统计结果就可以了 */ public class ForDemo02 { public static void main(String[] args) { //定义统计变量,初始化值是0 int count = 0; //获取三位数,用for循环实现 for(int x=100; x<1000; x++) { //获取三位数的个位,十位,百位 int ge = x%10; int shi = x/10%10; int bai = x/10/10%10; //判断这个三位数是否是水仙花数,如果是,统计变量++ if((ge*ge*ge+shi*shi*shi+bai*bai*bai) == x) { count++; } } //输出统计结果就可以了 System.out.println("水仙花数共有:"+count+"个"); } }
2.while循环
/* while循环语句格式: 1.基本格式 while(判断条件语句) { 循环体语句; } 2.扩展格式 初始化语句; while(判断条件语句) { 循环体语句; 控制条件语句; } */
示例一:
package com.it_01; /* * 需求: * 1.求100以内所有的整数和 */ public class WhileDemo { public static void main(String[] args){ int i = 0; int sum = 0; while (i<=100){ if(i%2 ==0){ sum+=i; } i++; } System.out.println("sum:"+sum); } }
示例二:
package com.it_01; /* * 需求:在控制台输出所有的”水仙花数”以及个数 * * 分析: * 什么是水仙花数呢? * 所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。 * 举例:153就是一个水仙花数。 * 153 = 1*1*1 + 5*5*5 + 3*3*3 * * A:三位数其实就告诉了我们水仙花数的范围 * 100-999 * B:如何获取一个数据的每一个位上的数呢? * 举例:我有一个数据153,请问如何获取到个位,十位,百位 * 个位:153%10 = 3; * 十位:153/10%10 = 5; * 百位:153/10/10%10 = 1; * 千位:... * 万位:... * C:让每个位上的立方和相加,并和该数据进行比较,如果相等,就说明该数据是水仙花数,在控制台输出 */ public class WhileDemo02 { public static void main(String[] args){ int i = 100; int sum = 0; while (i<=1000){ int gei = i%10; int shi = i/10%10; int bai = i/100%10; if(gei*gei*gei+shi*shi*shi+bai*bai*bai==i){ System.out.println(i); sum +=1; } i++; } System.out.println(sum); } }
3.do..whlie..循环
/* do…while循环语句格式: 1.基本格式 do { 循环体语句; }while((判断条件语句); 2.扩展格式 初始化语句; do { 循环体语句; 控制条件语句; } while((判断条件语句); */
示例一:
package com.it_02; /* * do...while循环的基本格式: * do { * 循环体语句; * }while(判断条件语句); * 扩展格式: * 初始化语句; * do { * 循环体语句; * 控制条件语句; * }while(判断条件语句); * 执行流程: * A:执行初始化语句; * B:执行循环体语句; * C:执行控制条件语句; * D:执行判断条件语句,看是true还是false * 如果是true,回到B继续 * 如果是false,就结束 * * 需求: * 求出100以内所有的整数和 */ public class DoWhileDemo { public static void main(String[] args){ int i = 1; int sum = 0; do { if(i%2==0){ sum+=i; } i++; }while (i<=100); System.out.println(sum); } }
示例二:
package com.it_02; /* * do...while循环的基本格式: * do { * 循环体语句; * }while(判断条件语句); * 扩展格式: * 初始化语句; * do { * 循环体语句; * 控制条件语句; * }while(判断条件语句); * 执行流程: * A:执行初始化语句; * B:执行循环体语句; * C:执行控制条件语句; * D:执行判断条件语句,看是true还是false * 如果是true,回到B继续 * 如果是false,就结束 * * 需求: * * 统计所有的水仙花数以及各个数 */ public class DoWhileDemo02 { public static void main(String[] args){ int i = 100; int sum =0; do { int gei = i%10; int shi = i/10%10; int bai = i/100%10; if(gei*gei*gei+shi*shi*shi+bai*bai*bai==i){ System.out.println(i); sum +=1; } i++; }while (i<=1000); System.out.println(sum); } }
4.三种循环结构的区别
/* 1.虽然可以完成同样的功能,但是还是有小区别: do…while循环至少会执行一次循环体。 for循环和while循环只有在条件成立的时候才会去执行循环体 2.for循环语句和while循环语句的小区别: 使用区别:控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用, 如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。 */
示例代码:
package com.company; /* * 三种循环的区别: * A:do...while至少执行一次循环体 * B:for,while循环先判断条件是否成立,然后决定是否执行循环体 * * for和while的小区别: * for循环的初始化变量,在循环结束后,不可以被访问。而while循环的初始化变量,是可以被继续使用的。 * 如果初始化变量,后面还要继续访问,就使用while,否则,推荐使用for。 * * 循环的使用推荐: * for -- while -- do...while */ public class Main { public static void main(String[] args) { /* //for循环 for(int i =3;i>10;i++){ System.out.println("只是for循环"); } //while循环 int a = 3; while(a>3){ System.out.println("只是while循环"); } //do...while...循环 do { System.out.println("这是do...while..循环"); }while (a>3); //上述结果为:这是do...while..循环 */ //2.for循环的初始化变量,在循环结束后,不可以被访问。而while循环的初始化变量,是可以被继续使用的。 for(int x=1; x<=10; x++){ System.out.println("爱生活,爱Java"); } //这里的x无法继续访问 //System.out.println(x); System.out.println("-----------------"); int y = 1; while(y<=10) { System.out.println("爱生活,爱Java"); y++; } System.out.println(y); } }
5.跳转控制语句break和continue
break
/* 1.break的使用场景: 在选择结构switch语句中 在循环语句中 离开使用场景的存在是没有意义的 2.break的作用: 跳出单层循环 */
continue
/* 1.continue的使用场景: 在循环语句中 离开使用场景的存在是没有意义的 2.continue的作用: 单层循环对比break,然后总结两个的区别 break 退出当前循环 continue 退出本次循环 */
示例代码:
package com.it_03; public class BreakAndContinue { public static void main(String[] args){ for(int i =1;i<=10;i++){ if(i==3){ break; } System.out.println("这是break"); } System.out.println("--------------"); for(int i =1;i<=10;i++){ if(i==3){ continue; } System.out.println("这是continue"); } } }

浙公网安备 33010602011771号