Java中的流程控制语句包括if-else,switch-case,循环。
if语句
(1)三种格式
A:格式1
if(比较表达式) {
方法体;
}
执行流程:
判断比较表达式的值,看是true还是false。
如果是true,就执行方法体。
如果是false,就不执行方法体。
B:格式2
if(比较表达式) {
方法体1;
}else {
方法体2;
}
执行流程:
判断比较表达式的值,看是true还是false。
如果是true,就执行方法体1。
如果是false,就执行方法体2。
C:格式3
if(比较表达式1) {
方法体1;
}else if(比较表达式2){
方法体2;
}
...
else {
方法体n+1;
}
执行流程:
判断比较表达式1的值,看是true还是false。
如果是true,就执行方法体1。
如果是false,就继续判断比较表达式2的值,看是true还是false。
如果是true,就执行方法体2。
如果是false,就继续判断比较表达式3的值,看是true还是false。
...
如果都不满足,就执行方法体n+1。
(2)注意事项
A:比较表达式无论简单还是复杂,结果是boolean类型。
B:if语句控制的方法体如果是一条语句,是可以省略大括号的;如果是多条,不能省略。
建议:永远不要省略。
C:一般来说,有左大括号,就没有分号,有分号,就没有左大括号。
D:else后面如果没有if,是不会出现比较表达式的。
E:三种if语句其实都是一个语句,只要有一个执行,其他的就不再执行。
(3)三元运算符和if语句第二种格式的关系
所有的三元运算符能够实现的,if语句的第二种格式都能实现。
反之不成立。
如果if语句第二种格式控制的方法体是输出语句,就不可以。
因为三元运算符是一个运算符,必须要有一个结果返回。
/*
选择结构:
if语句
switch语句
if语句的格式:格式1
if(比较表达式) {
方法体;
}
*/
public class IfDemo1 {
public static void main(String[] args) {
int x = 10;
if(x == 10) {
System.out.println("x等于10");
}
if(x == 20) {
System.out.println("x等于20");
}
}
}
/*
if语句格式2:
if(比较表达式) {
方法体1;
}else {
方法体2;
}
注意:else后面是没有比较表达式的,只有if后面有。
*/
public class IfDemo2 {
public static void main(String[] args) {
//判断两个数据是否相等
int a = 10;
int b = 20;
if(a == b) {
System.out.println("a等于b");
}else {
System.out.println("a不等于b");
}
}
}
import java.util.Scanner;
/*
if语句的格式3:
if(比较表达式1) {
方法体1;
}else if(比较表达式2) {
方法体2;
}else if(比较表达式3) {
方法体3;
}
...
else {
方法体n+1;
}
*/
public class IfDemo3 {
public static void main(String[] args) {
//需求:键盘录入一个成绩,判断并输出成绩的等级。
/*
90-100 优秀
80-90 好
70-80 良
60-70 及格
0-60 不及格
*/
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//录入数据
System.out.println("请输入你的考试成绩:");
int score = sc.nextInt();
if(score<0 || score>100) {
System.out.println("你输入的成绩有误");
}else 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 {
System.out.println("不及格");
}
}
}
switch语句
(1)格式:
switch(表达式) {
case 值1:
方法体1;
break;
case 值2:
方法体2;
break;
...
default:
方法体n+1;
break;
}
格式解释说明:
表达式:可以是byte,short,int,char,JDK5以后可以是枚举,JDK7以后可以是字符串。
case:后面的值就是要和表达式进行比较的值。
break:表示程序到这里中断,跳出switch语句。
default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else。
(2)执行流程:
A:首先计算表达式的值。
B:和每一个case进行匹配,如果有就执行对应的方法体,看到break就结束。
C:如果没有匹配,就执行default的方法体n+1。
(3)注意事项:
A:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的。
B:break省略之后会出现一个现象:case穿透。
C:default不一定要在最后可以在任意位置。
E:switch语句的结束条件。
a:遇到break就结束了。
b:执行到末尾就结束了。
(4)if语句和switch语句各自的场景
A:if
针对boolean类型的判断。
针对一个范围的判断。
针对几个常量的判断。
B:switch
针对几个常量的判断。
import java.util.Scanner;
/*
switch语句格式:
switch(表达式) {
case 值1:
方法体1;
break;
case 值2:
方法体2;
break;
...
default:
方法体n+1;
break;
}
案例:
键盘录入一个数据,根据这个数据,我们输出对应的星期?
键盘录入1,对应输出星期一
键盘录入2,对应输出星期二
...
键盘录入7,对应输出星期日
*/
public class SwitchDemo1 {
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;
}
}
}
循环语句
(1)有三种:for,while,do-while。
(2)for循环语句
A:格式
for(初始化语句;判断条件语句;控制条件语句){
循环体语句;
}
执行流程:
a:执行初始化语句。
b:执行判断条件语句:
如果这里是true,就继续。
如果这里是false,循环就结束。
c:执行循环体语句。
d:执行控制条件语句。
e:回到b。
B:注意事项
a:判断条件语句无论简单还是复杂,结果是boolean类型。
b:循环体语句如果是一条,可以省略大括号。
c:有分号就没有左大括号,有左大括号就没有分号。
(3)while循环
A:基本格式
while(判断条件语句) {
循环体语句;
}
通过查看这个格式,我们就知道while循环可以和for循环等价转换。
(4)do...while循环
A:基本格式
do {
循环体语句;
}while(判断条件语句);
B:三种循环的区别
a:do...while循环至少执行一次循环体。
b:for和while必须先判断条件是否是true,然后后才能决定是否执行循环体。
/*
循环语句:for循环,while循环,do...while循环。
for循环格式:
for(初始化语句;判断条件语句;控制条件语句) {
循环体语句;
}
需求:请在控制台输出10次"HelloWorld"
*/
public class ForDemo1 {
public static void main(String[] args) {
//最原始的做法
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("----------");
//我们用循环改进
for(int x=1;x<=10;x++) {
System.out.println("HelloWorld");
}
}
}
/*
while循环的基本格式:
while(判断条件语句) {
循环体语句;
}
通过这个格式,我们就可以看到其实和for循环是差不多的。
for(初始化语句;判断条件语句;控制条件语句) {
循环体语句;
}
*/
public class WhileDemo1 {
public static void main(String[] args) {
//输出10次"HelloWorld"
//for语句版
for(int x=0; x<10; x++) {
System.out.println("HelloWorld");
}
System.out.println("--------------");
//while语句版
int x=0;
while(x<10) {
System.out.println("HelloWorld");
x++;
}
}
}
/*
while循环和for循环的区别?
使用区别:如果你想在循环结束后,继续使用控制条件的那个变量,用while循环,否则用for循环。不知道用for循环。
因为变量及早的从内存中消失,可以提高内存的使用效率。
其实还有一种场景的理解:
如果是一个范围的,用for循环非常明确。
如果是不明确要做多少次,用while循环较为合适。
*/
public class WhileDemo2 {
public static void main(String[] args) {
//for循环实现
for(int x=0; x<10; x++) {
System.out.println("学习Java");
}
//这里不能在继续访问了
// System.out.println(x);
//while循环实现
int y = 0;
while(y<10) {
System.out.println("学习Java");
y++;
}
//这里是可以继续访问的
System.out.println(y);
}
}
/*
do...while循环的基本格式:
do {
循环体语句;
}while(判断条件语句);
*/
public class DoWhileDemo1 {
public static void main(String[] args) {
//输出10次HelloWorld。
int x = 0;
do {
System.out.println("HelloWorld");
x++;
}while(x<10);
System.out.println("--------------");
//求和1-100
int sum = 0;
int a = 1;
do {
sum += a;
a++;
}while(a<=100);
System.out.println(sum);
}
}
跳出循环语句
(1)break:中断的意思
A:用在循环和switch语句中,离开此应用场景无意义。
B:作用
a:跳出单层循环。
b:跳出多层循环,需要标签语句的配合。
(2)continue:继续
A:用在循环中,离开此应用场景无意义。
B:作用
a:跳出单层循环的一次,可以继续下一次。
(3)return:返回 (此处有个比较常见的面试题,在异常部分说)
A:用于结束方法的,后面还会在继续讲解和使用。
B:一旦遇到return,程序就不会在继续往后执行。
/*
控制跳转语句:
break:中断
continue:继续
return:返回
break:中断的意思
使用场景:
A:switch语句中
B:循环语句中。
(循环语句中加入了if判断的情况)
注意:离开上面的两个场景,无意义。
如何使用呢?
A:跳出单层循环
B:跳出多层循环
要想实现这个效果,就必须知道一个东西。带标签的语句。
格式:
标签名: 语句
*/
public class BreakDemo {
public static void main(String[] args) {
//跳出单层循环
for(int x=0; x<10; x++) {
if(x == 3) {
break;
}
System.out.println("HelloWorld");
}
System.out.println("-------------");
//退出多重循环
wc:for(int x=0; x<3; x++) {
nc:for(int y=0; y<4; y++) {
if(y == 2) {
//break nc;
break wc;
}
System.out.print("*");
}
System.out.println();
}
}
}
/*
continue:继续
使用场景:
循环中。离开此场景无意义。
*/
public class ContinueDemo {
public static void main(String[] args) {
for(int x=0; x<10; x++) {
if(x == 3) {
//break;//0 1 2
continue;//0 1 2 4 5 6 7 8 9
}
System.out.println(x);
}
}
}
/*
return:返回
其实它的作用不是结束循环的,而是结束方法的。
*/
public class ReturnDemo {
public static void main(String[] args) {
for(int x=0; x<10; x++) {
if(x == 2) {
System.out.println("退出");
//break;// 0 1 退出 over
//continue;//0 1 退 出 3 4 5 6 7 8 9 over
return;// 0 1 退出
}
System.out.println(x);
}
System.out.println("over");
}
}