1.流程控制
1.1流程控制语句概述
1.2流程控制语句分类
1.3顺序结构
顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
/**
* 顺序结构
*/
public class constant {
public static void main(String[] args) {
System.out.println("开始");
System.out.println("语句1");
System.out.println("语句2");
System.out.println("语句3");
System.out.println("语句4");
System.out.println("语句5");
System.out.println("结束");
}
}
结果
开始
语句1
语句2
语句3
语句4
语句5
结束
从上往下依次执行
1.4分支结构(if,switch 语句控制)
1.4.1 if语句格式1
格式:
if(关系表达式){语句体}
执行流程:
1.首先计算关系表达式的值
2.如果关系表达式的值为true就执行语句体
3.如果关系表达式的值为false就不执行语句体
4.继续执行后面的语句的内容
/**
* if 语句格式
* if(关系表达式){
* 语句体
* }
* 执行流程
* 1.首先计算关系表达式中的值
* 2.如果关系表达式的值为true就执行语句体
* 3.如果关系表达式的值为false就不执行语句体
* 4.继续执行后面的语句内容
*/
public class constant {
public static void main(String[] args) {
System.out.println("开始");
// 声明2个int变量
int a = 2;
int b = 3;
// 需求判断a和b的值是否相等,如果相等,就在控制台输出a等于b
if (a == b) {
System.out.println("a等于b");
}
;
System.out.println("结束");
}
}
1.4.2 if语句格式2
格式
if(关系表达式){语句体}else{语句2}
执行流程
1.首先计算关系表达式的值
2.如果关系表达式的值为true就执行语句1
3.如果关系表达式的值为false就执行语句2
4继续执行后面代码。
/**
* 格式
* if(关系表达式){语句体}else{语句2}
* 执行流程
* 1.首先计算关系表达式的值
* 2.如果关系表达式的值为true就执行语句1
* 3.如果关系表达式的值为false就执行语句2
* 4继续执行后面代码。
*/
public class constant {
public static void main(String[] args) {
System.out.println("开始");
// 声明2个int变量
int a = 2;
int b = 3;
// 需求判断a和b的值是否相等,如果相等,就在控制台输出a等于b,如果a不等于b,则控制台输出a不等于b
if (a == b) {
System.out.println("a等于b");
} else {
System.out.println("a不等于b");
}
;
System.out.println("结束");
}
}
案例 :奇偶数
需求:任意给出一个整数,请用程序实现判断整数是奇数还是偶数,并在控制台输出该整数时奇数还是偶数
分析:1为了体现任意给出一个整数,采用键盘录入一个数据
使用键盘录入功能需要导包
import java.util.Scanner
创建对象
Scanner sr=new Scanner(System.in)
接收数据
int number =sr.nextlnt();
2,判断整数是偶数还是奇数要分两种情况进行判断,使用if…else 结构。
if(){}else{}
3.判断是否偶数需要使用取余运算符实现功能number%2==0
if(number%2==0){}else{}
4.根据判断情况,在控制台输出相应的内容
if(mumber%2==0){
System.out。println(number+“是偶数”)
}else{
System.out。println(number+“是奇数”)
}
/**
* 格式:
* 需求:任意给一个整数,请程序实现判断整数是偶数还是奇数,并在控制台输出该整数时奇数还是偶数、
*/
//为了体现任意给出一个整数,采用键盘录入一个数据
//1.使用键盘录入功能需要导包
import java.util.Scanner;
public class constant {
public static void main(String[] args) {
// 创建对象
Scanner myScanner = new Scanner(System.in);
// 接收数据
int number = myScanner.nextInt();
// 2 判断整数是偶数还是奇数 分两种情况进行判断,使用if...else
if (number % 2 == 0) {
System.out.println(number + "是偶数");
} else {
System.out.println(number + "是奇数");
}
}
}
格式:
if(关系表达式1){语句1}else if(关系表达式2){语句2}else{语句体}
执行流程:
1.首先计算关系表达式1的值
2.如果值为true就执行语句1,如果值为false就计算关系表达式2的值
3.如果值为true就执行语句体2;如果值为false就计算关系表达式3的值
4.。。。。。
5.如果没有任何关系表达式为true,就执行语句体n+1
/**
* 格式:
* if(关系表达式1){语句1}else if(关系表达式2){语句2}else{语句3}
* 执行了流程:首先计算关系式1的值
* 2.如果值为true就执行语句体1,如果值为false就计算关系表达式的值
* 3.如果值为true就执行语句体2,如果值为false就输出语句3
*/
//为了体现任意给出一个整数,采用键盘录入一个数据
//1.使用键盘录入功能需要导包
import java.util.Scanner;
public class constant {
public static void main(String[] args) {
// 创建对象
Scanner sc = new Scanner(System.in);
// 需求:键盘录入一个星期(1,2,3,4,5,6,7)输出对应的是星期一,二,三,四,星期日
System.out.println("请输入一个星期数(1-7)");
// 接收数据
int week = sc.nextInt();
if (week == 1) {
System.out.println("星期一");
} else if (week == 2) {
System.out.println("星期二");
} else if (week == 3) {
System.out.println("星期三");
} else if (week == 4) {
System.out.println("星期四");
} else if (week == 5) {
System.out.println("星期五");
} else if (week == 6) {
System.out.println("星期六");
} else if (week == 7) {
System.out.println("星期日");
} else {
System.out.println("输入有误");
}
}
}
案例:考试奖励
小明快要期末考试了,小明爸爸对他说,会根据他不同的考试成绩,送他不同的礼物,假如你可以控制小明的得分,
请用程序实现小明到底该获得什么样的礼物,并在控制台输出。
90-94 去游乐场
95-100分 购买属于自己的自行车
80-89分 变形金刚
80分以下,揍一顿
1.小明的考试未知,可以采用键盘录入的方式获取值,使用键盘录入功能需要导包,创建对象,接收数据
import java.util.Scanner;
Scanner sc=new Scanner(System.in);
int score=sc.nextInt();
2.由于奖励种类较多,属于多种判断,采用if…else,=…if 格式实现
if(){}else if(){}else if(){}else{}
3.为每种判断设置对应的条件
if(score>=95&&score<=100){}
else if(score>=90&&score<=94){}
else if(score>=80&&score<=89){}
else if(score<=80){}
4.为每种判断设置对应的奖励
System.out.println("山地自行车一辆")
System.out.println("游乐场玩一次")
System.out.println("变形金刚玩具一个")
System.out.println("胖揍一顿")
2.switch语句
格式:
switch(表达式){
case值1:
语句体1:
break;
case值2:
语句体2:
break;
.....
default:
语句体n+1;
[break]
}
执行流程:
1.首先计算表达式的值
2.依次和case 后面的值进行比较,如果相应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束
3.如果所有的case后面的值和表达式的值不匹配,就会执行default里面的语句体,然后程序结束掉。
/**
* 格式:switch(表达式){
* case值1:
* 语句1:
* break;
* case值2:
* 语句体2:
* break
* default:
* 语句体n+1
* [break]
* }
* 格式说明:
* 表达式的值:取值为byte,short,int,char,Jdk5,以后可以是枚举,JDK7以后可以是String
* case:后面跟的是要和表达式进行比较的值
* break:表示中断,结束的意思,用来结束switch语句
* default:表示所有情况都不匹配,就执行该行代码,和if语句中else 相似
* 执行顺序:
* 首先计算表达式的值
* 依次和case 中的值进行比较,如果有对应的值,就执行相应的语句,在执行的过程中,遇到break就会结束
* 如果所有的case后面的值和表达式不匹配,就会执行default里面的语句体,然后程序结束掉。
*/
//为了体现任意给出一个整数,采用键盘录入一个数据
//1.使用键盘录入功能需要导包
import java.util.Scanner;
public class constant {
public static void main(String[] args) {
// 创建对象
Scanner scObject = new Scanner(System.in);
// 需求:键盘录入一个星期(1,2,3,4,5,6,7)输出对应的是星期一,二,三,四,星期日
System.out.println("请输入一个星期数(1-7)");
// 接收数据
int week = scObject.nextInt();
switch (week) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二1");
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;
}
}
}
案例:春夏秋冬
需求:一年有12个月,分属于春夏秋冬4个季节,键盘录入一个月份,请用程序实现判断月份属于那个季节,并输出。
分析:
- 键盘录入月份数据,使用变量接收
2.多情况判断,这里采用switch实现improt java.util.Scanner
Scanner object1=new Scanner(System.in)
int month=sc.nexInt();
3.在每种情况中,完成输入对应的季节(选择几个) ```javascript case 3: System.out.println(”春季”); break; case 6: System.out.println(”夏季”); break; case 9 : System.out.println(“秋季”); break case 12: System.out.println(“冬季”) breakswitch(month){
case x:
case x:
case x:
default:
}
```javascript
/**
* 案例:春夏秋冬
* 需求:一年有12个月,分属于春夏秋冬4个季节,键盘录入一个月份,请用程序实现判断该月份属于那个季节,并输出.
* 春:3,4,5,
* 夏:6,7,8
* 秋:9,10,11,
* 冬:12,1,2
*/
//键盘录入
import java.util.Scanner;
public class constant {
public static void main(String[] args) {
// 创建对象
Scanner scObject = new Scanner(System.in);
int month = scObject.nextInt();
// 多情况判断,这里采用switch语句实现
// 在每种情况中,完成输出对应的季节
switch (month) {
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;
case 8:
System.out.println("夏季");
break;
case 9:
System.out.println("秋季");
break;
case 10:
System.out.println("秋季");
break;
case 11:
System.out.println("秋季");
break;
case 12:
System.out.println("冬季");
break;
default:
System.out.println("输入月份有误");
break;
}
/**
* case 穿透
*/
switch (month) {
case 1:
case 2:
case 3:
case 4:
System.out.println("冬季");
break;
case 5:
case 6:
case 7:
case 8:
System.out.println("春季");
break;
case 9:
case 10:
case 11:
case 12:
System.out.println("秋季");
break;
default:
System.out.println("输入月份有误");
break;
}
}
}
3循环结构(for,while,do….while 语句控制)
1.1循环结构
循环结构:
初始化语句:用于表示循环开启的起始状态,简单说就是循环开始的时候什么样,
条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去
循环体语句:用于表示循环反复执行的内容,简单说就是循环反复执行的事情
条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否执行下去。
循环结构对应的语法:
初始化语句:这里可以是一条或者多条语句,这里语句可以完成一些初始化操作。
条件判断句:这里使用一个结果值为boolean类型的表达式,这个表达式能决定是否执行循环体例如a<3
循环体语句:这里可以是任意语句,这些语句将反复执行
条件控制语句:这里通常是使用一条语句来改变变量的值,从而达到控制循环是否继续向下执行的效果,常见的i++,i—,这样的操作。
1.2 for 循环语句格式
格式:
for (初始化语句;条件判断语句;条件控制语句){
循环体语句
}
执行流程:
1.执行初始化语句
执行条件判断语句,看结果是true还是false
如果是false, 循环结束
如果是true ,循环继续执行
3.执行循环体语句
4.执行条件控制语句
5 回到2继续执行。 ```javascript /**- 格式:for(初始化语句;条件判断语句;条件控制语句){
- 循环体
- }
- 执行流程:
- 1,执行初始化语句
- 2.执行条件判断句,看结果为true,还是false
- 如果是false ,循环结束
- 如果是true, 循环继续
- 3.执行循环体语句
- 4.执行条件控制语句
- 5,回到2继续 */
public class constant { public static void main(String[] args) { for (int i = 0; i <= 10; i += 2) { System.out.println(“第” + i + “次”); } }
}
案例:输出数据<br />需求:在控制台输出1-5和5-1数据
```javascript
分析:
1.反复进行输出动作,使用循环结构
for(初始化语句;条件判断语句;条件控制语句){}
2.从1开始到5结束,设置初始化开始
for(int i=1;条件判断语句;条件控制语句){}
3.从1开始到5结束,设置判断条件为没有到5的时候继续执行,执行超过5程序结束
for(int i=1;i<=5;条件控制语句){}
4.从1到5,每次增加1,设置条件控制每条+1
for(int i=1;i<=5;i++){}
/**
* 案例:输出数据
* 需求:在控制台输出1-5和5-1数据
*/
public class constant {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}
for (int j = 5; 1 <= j && j <= 5; j--) {
System.out.println(j);
}
}
}
案例:求和
需求:求1-5之间的数据和,并把求和结果在控制台输出
分析:
1.求和的最终结果必须保存起来,需要定义一个变量,用于保存求和的结果,初始值为0
int sum =0;
2.从1开始到5结束的数据,使用循环结构完成
for(int i=1;i<=5;i++){}
3.将反复进行的事情写入循环结构内部,此外反复进行的事情是将数据i加到用于保存最终求和的变量sum中
for(int i=1;i<=5;i++){sum+=i}
4.当循环执行完毕时,最终数据打印出来。
/**
* 案例:求和
* 需求:求1-5之间的数据和,并把求和结果在控制台输出
*/
public class constant {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 5; i++) {
sum = sum + i;
}
System.out.println(sum);
}
}
案例:求偶数和
需求:求1-100之间的偶数和,并把求和结果在控制台输出
分析:1.对1-100的数据求和与1-5的数据求和几乎完全一样,仅仅时结束条件不一样
int sum=0;
for(int i=1;i<=100;i++){
}
3.限制条件是偶数才参与运算条件,因此条件应该判断是否为偶数
int sum=0;
for(int i=1;i<=100;i++){
if(i%2==0){
sum+=i
}
}
/**
* 案例:求偶数和
* 需求:求1-100之间的偶数和,并把求和结果在控制台输出
*/
public class constant {
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);
}
}
while 循环语句
基本格式:
while(条件判断句){
循环体语句;
条件控制语句;
}
执行流程:
1.执行语句
2.执行条件判断语句,看其结果是true还是false
如果是false 循环结束
如果是true 继续执行
3,执行循环体语句
4.执行条件控制语句
5,回到2继续
/**
* 格式: while(布尔表达式){
* //循环内容
* }
* 需求:
*/
public class constant {
public static void main(String[] args) {
// 需求:在控制台输出5次""Hello World"
int a = 0;
while (a <= 5) {
System.out.print("Hello World");
a += 1;
}
for (int i = 0; i <= 5; i++) {
System.out.print("Hello World");
}
}
}
案例:珠穆朗玛峰
需求:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。
请问:我折叠多少次,可以折成珠穆朗玛峰高度。
折叠一次厚度为原来的一倍
案例分析:
1.因为要反复折叠,所以要使用循环,但不知道折叠多少次,这种情况下更适合while循环
while(条件判断句){循环体}
2.循环的执行过程中每次纸张折叠,纸张的厚度要加倍,因此需要先定义纸张的厚度,在循环中使厚度加倍。
double paper=0.1 //初始厚度
while(条件判断句){
paper*=2
}
- 折叠的过程中当纸张厚度大于珠峰就停止了,因此继续执行的要求是纸张厚度小于珠峰高度
4.设置一个计数器,在循环中执行累加,对应叠加多少次。int zf=8844430;//珠穆朗玛峰高度
while(paper<=zf){.....}
代码: ```javascript /**int count=0;
while (paper<=zf){
count++
}
- 案例:珠穆朗玛峰
- 需求:世界最高山峰是珠穆朗玛峰(8844.43豪米),假如我有一张足够大的纸,它的厚度是0.1毫米。
- 请问:我折叠多少次,可以折成珠穆朗玛峰的高度
- 折叠一次厚度为原来的一倍 */
public class constant { public static void main(String[] args) { // 纸张厚度 double hd = 0.1; // 珠峰高度 int zf = 8844430; // 定义计时器 int count = 0; // 因为要反复折叠,所以要使用循环,但是不知道折叠多少次,这种情况下更合适使用while循环 // 折叠的过程中当纸张厚度大于珠峰就停止了,因此继续执行的要求是纸张厚度小于珠峰高度 while (hd <= zf) { hd *= 2; count++;
}
System.out.println(count + "次");
}
}
<a name="dUcn2"></a>
## do...while循环语句
基本格式:
```javascript
do {
循环体语句;
}while(条件判断语句)
完整格式:
初始化语句
do{
循环体语句;
条件控制语句;
}while(条件判断语句)
执行流程:
1.执行初始化语句
2.执行循环体语句
3.执行条件控制语句
4.执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
5.回到2继续
public class Test {
public static void main(String[] args){
int x = 10;
do{
System.out.print("value of x : " + x );
x++;
System.out.print("\n");
}while( x < 20 );
}
}
三种循环的区别
三种循环的区别:
for 循环和while 循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
do….while 循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
for 和while 的区别:
条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
条件控制语句所控制的自增变量,对于while 循环来说不属于其语法结构中,在while循环结束后,该变量还可以继续使用。
跳转控制语句控制
continue 用在循环中,基于条件控制,跳出某次循环体内容的执行,继续下一次的执行
break 用在循环中,基于条件控制,终止循环体内容的执行,也就是说结束当前的循环体