一、流程控制语句
在程序执行的工程中,每一行代码的执行顺序都对程序的结果有着直接影响。所以我们要清楚的知道每一行代码的执行顺序,通过控制代码的执行顺序来实现我们想要的功能。
- 流程控制语句的分类
- 顺序结构
- 选择结构
- 循环结构
一. 顺序结构
是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的 先后顺序,依次执行,程序中大多数的代码都是这样执行的。
总的来说:写在前面的先执行,写在后面的后执行
二. 选择结构
也被称为分支结构。
选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
简单来说就是,根据逻辑运算判断执行那一块的代码,整个过程只执行一次
Java语言提供了两种选择结构语句
(1)if语句
(2)switch语句
(1) IF语句
(1.1) IF语句第一种格式:
if (关系表达式) {
语句体
}
关系表达式:通常都是布尔表达式,判断括号中的内容所得出的结果是 true 还是 false。
public class IfDemo {
public static void main(String[] args) {
int i = 10;
if(i == 10) {
System.out.println("i等于10");
}
}
}
IF语句第二种格式:
if (关系表达式) {
语句体1;
}else if(关系表达式){
语句体2;
}else{
语句体3;
}
//需求:键盘录入月份的值,输出对应的季节。
//代码如下:
import java.util.Scanner;
public class IfTest {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//录入数据
System.out.println("请你输入一个月份:");
int month = sc.nextInt();
if(month<1 || month>12) {
System.out.println("你输入的月份有误");
}else if(month>=3 && month<=5) {
System.out.println("春季");
}else if(month>=6 && month<=8) {
System.out.println("夏季");
}else if(month>=9 && month<=11) {
System.out.println("秋季");
}else {
System.out.println("冬季");
}
}
}
输出结果:根据你键盘的输入值的大小会得到相应的结果,比如输入3,结果为:春季。
科普:实现键盘输入的过程
1、导包:导包import java.util.Scanner;
2、创建键盘录入对象:Scanner sc = new Scanner(System.in);
3、通过对象获取数据:int x = sc.nextInt();
(2) switch语句
- switch语句格式:
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
…
default:
语句体n+1;
break;
}
执行流程
第一步,计算出表达式的值
第二步,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后将程序结束。
Demo代码示例:
//练习:使用scanner键盘输入,通过键盘输入的内容来判断今天是星期几。
import java.util.Scanner;
public class SwitchDemo {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//控制键盘录入数据
System.out.println("请输入一个数据(1-7):");
int week = sc.nextInt(); //3
//switch判断语句
switch(week) {
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;
}
}
}
输出结果:根据你键盘的输入值的大小会得到相应的结果,比如输入4,结果为:星期四。
三.循环结构
循环结构:相同的操作执行多次,只到满足条件为止。
Java语言提供了两种循环结构语句
1. for循环
2. while循环
3. do…while循环
1. for循环
for循环语句是支持迭代的一种通用结构,是最有效最灵活的循环结构。
//for循环语句格式:
for(初始化语句;布尔表达式;迭代){
循环体语句;
}
执行流程:1.执行for循环代码时,程序会先执行初始化语句。
2.然后执行布尔表达式,看结果是true还是false。如果是true,程序继续执行循环,如果是false,循环结束,跳出循环。
3.然后执行循环体语句
4.在执行控制条件语句,有就是迭代部分,以此循环,直到布尔表达式部分结果为false时跳出循环
- 练习1,分别计算0到100之间的奇数和偶数的和
public class For01{
public static void main(String[] args) {
//练习1,分别计算0到100之间的奇数和偶数的和
int oddSum = 0;//奇数
int evenSum = 0;//偶数
// 初始表达式; 布尔表达式; 迭代
for (int i = 0; i < 100; i++) {
if(i%2!=0){ // i除2不等于0,所以条件是奇数
oddSum+=i;
}else if(i%2==0){ // i除2等于0,所以条件是奇数
evenSum+=i;
}
}
System.out.println("奇数相加总和:"+oddSum);
System.out.println("偶数相加总和:"+evenSum);
}
}
输出结果:奇数相加总和:2500,偶数相加总和:2450
- 练习2,输出0至1000之间能被5整除的数字,并且每行输出三个
public class For02{
public static void main(String[] args) {
//练习2,输出0至1000之间能被5整除的数字,并且每行输出三个
for (int i = 0; i <= 1000; i++) {
if(i%5==0){
System.out.print(i+"\t");//\t 空格
}
if(i%(5*3)==0){
System.out.print("\n");
//换行 和System.out.println();一个意思
}
}
}
}
- 练习3,for循环嵌套实现九九乘法表
/**
控制台输出九九乘法表
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
**/
public static void main(String[] args) {
//如何使用For循环打印出九九乘法表
//问题拆分
//第一步打印第一列
for (int i = 1; i <= 9; i++) {
System.out.println(1+"*"+i+"="+1*i);
}
System.out.println("-----------------------------------------------");
//第二步在使用一个for循环,循环第一步产生的结果
for (int i = 1 ; i <= 9; i++) {
for (int j = 1; j <= i ; j++) {
System.out.print(j+"*"+i+"="+j*i+"\t");
}
System.out.println();
}
/*
得出结论:将此类问题拆分之后,第一步使用一个for循环,将乘法表中第一排循环打印出来得出:
1*1=1
1*2=2
1*3=3
1*4=4
1*5=5
1*6=6
1*7=7
1*8=8
1*9=9
第二步,因为第一个循环只能遍历条件控制语句中限制的内容,无法完成乘法表全部的内容,
所以需要使用第二个for循环,这里可以理解为当第一个循环循环时会和第二个循环一同遍历,
第一个循环遍历九九乘法表的列,第二个循环遍历九九乘法表的行
* */
}
2.while循环语句
while循环语句格式:
while(判 断条件语句) {
循环体语句;
}
while循环和for循环可以等价转换,但还是有些小区别的:
for循环适合针对一个范围判断进行操作
while循环适合判断次数不明确操作
- 练习:我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。
请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?
public class While{
public static void main(String[] args) {
//定义一个统计变量,默认值是0
int count = 0;
//最高山峰是珠穆朗玛峰:8848m这是最终的厚度
//我现在有一张足够大的纸张,厚度为:0.01m这是初始厚度
//为了简单,我把0.01变成1,同理8848就变成了884800
int end = 884800;
int start = 1;
while(start<end) {
//只要每次变化的厚度没有超过珠穆朗玛峰的高度,就折叠,统计变量++
count++;
//折叠一次有什么变化呢?就是厚度是以前的2倍。
start *= 2;
System.out.println("第"+count+"次厚度是"+start);
}
//输出统计变量。
System.out.println("要叠"+count+"次");
}
}
3.do…while循环语句
do…while循环语句格式:
do {
循环体语句;
}while((判 断条件语句);
do…while循环语句与其他两种循环语句的区别是什么?
区别:do…while循环至少会执行一次循环体。
for循环和while循环只有在布尔表达式条件成立的时候才会去执行循环体
注意: 写程序优先考虑for循环,再考虑while循环,最后考虑do…while循环。
while(true){}和for(;;){}都是死循环
public class DoWhile{
public static void main(String[] args) {
int i = 50;
do {
System.out.println("多读书,多看报,少吃零食,多睡觉");
i++;
} while(i<60);
System.out.println("说的对啊!");
}
}
二、跳转控制语句
在某个循环执行到某一步的时候想结束循环
Java提供了break,continue和return来实现控制语句的跳转和中断。
break 中断
应用场景:
- 可用于switch结构(选择结构)中
- 在循环中使用(循环中如果有if条件判断的情况下)
作用:
- 满足条件之后跳出循环体
IF:
public class Xunhuan {
public static void main(String[] args) {
int age =18;
for(int i=1;i<18;i++) {
if(i%2==0) {
System.out.println("1-18之间的第一个偶数是:"+i);
break;//符合条件之后,终止“整个循环体。换句话说:跳出循环体”
}
}
}
}
Switch:
public void Switch(){
Scanner can = new Scanner(System.in);
int in = can.nextInt();
switch(in) {
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("我也不知道啊");
}
}
continue 继续
应用场景:
- 在循环中使用
作用:
- 跳出本次循环,进入下一次循环
- 满足条件之后,继续执行循环,直到布尔表达式为false为止
public class Xunhuan {
public static void main(String[] args) {
int age =18;
for(int i=1;i<18;i++) {
if(i%2==0) {
System.out.println("1-18之间的第一个偶数是:"+i);
continue;//结束本次循环,跳到下一次循环
}
}
}
}
- return 返回
return关键字不是为了跳转出循环体,更常用的功能是结束一个方法,也就是退出一个方法。跳转到上层调用的方法。