今天我们来学习流程控制语句
一、选择结构语句
1.1 If语句
if语句格式1:
if(表达式){
语句;
}
注意事项:
1)有左大括号的地方{ 不能有分号;有分号的地方不能有左大括号
2)if语句中如果是单条语句,大括号可以省略,(永远建议不要省略)
3)Java中有一个代码块的概念(面向对象中讲"static")
写法:
{
int x =10 ;
System.out.println(x);
}
4)表达式:无论是复杂的还是简单的,都是boolean类型
应用场景:
针对两种结果进行判断
if语句格式2:
if(关系表达式) {
语句体1;
}else {
语句体2;
}
执行流程:
1)首先判断表达式是否成立
2)如果成立,语句1;
3)如果不成立,执行语句2
if语句的格式2,和三元运算符的区别?
三元运算符这对的是某个数据的数据值在进行判断; (表达式)?true的结果:false的结果;
if语句格式2:
针对两个结果进行判断,输出一个结果(可能是一个输出语句,也可能是具体的值)
三元运算符能够使用的,一定可以使用if;但是if使用,不一定能够收三元!
开发过程中,没有特别要求,都是用If语句!
if语句格式3:
if(关系表达式1) {
语句体1;
}else if (关系表达式2) {
语句体2;
}
…
else {
语句体n+1;
}
执行流程:
1)先判断表达式1是否成立,成立,执行语句1
2)如果不成立,在此判断表达式2是否成立,成立,执行语句2
3)…最终上面的结果都不匹配,执行else中的语句n+1;
if三种格式的应用场景:
if格式1:针对单个情况判断
if格式2:针对两种情况判断 (开发中使用居多)
if格式3:针对两个以上的判断
1.2. switch语句
switch语句格式:
switch(表达式) {
case 值1:
语句体1;
break; (中断,结束的意思)
case 值2:
语句体2;
break;
…
default: (默认的意思)
语句体n+1;
break;
}
执行流程:
1)表达式中的值和case中的 值1进行比较,匹配成功,就执行语句1,遇见break,switch 结束了
2)依次case值2,进行比较,成立,执行语句2,语句结束…
3)…如果上述都不匹配,执行default中的语句,break结束.
格式解释:
switch ----->启用当前switch语句
表达式------>一般接收具体的变量
表达式的类型一般情况:byte,short,int,char
Tips:
如果是jdk1.5以后,表达式的类型可以是"枚举"
如果是jdk1.7以后,表达式的类型可以是String类型 (String:是一个引用类型)
case语句---->需要将当前的case的值和switch中表达式进行比较,是否匹配
break语句—> 表示结束,中断 switch语句
default ---->case后面都不匹配,执行default
注意事项:
1)在Java语言中,case后面的值只能是常量,不能是变量
2)关于switch语句的中break(属于跳转控制语句中的一种)
break一般情况下建议不要省略,如果没有书写break语句,会出现case穿透现象!
3)关于default语句的位置问题
a)default语句中的break可以忽略不写,但是不建议
b)可以在switch语句中的任何位置,但是还要遵循switch的按照顺序进行执行(case中都不匹配,才能执行default)
c)如果default语句在语句中,break不能省略!
4)switch语句的结束条件:
a)语句break,语句结束
b)程序默认执行末尾,语句结束!
重点注意事项: case穿透性!!!!!
在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运行,直到遇到break,或者整体switch结束。
二、循环语句
2.1. for循环语句
for循环语句格式:
for(初始化语句;条件表达式;控制体语句){
语句体;
}
执行流程:
1)执行初始化语句---->给变量进行赋值
2)判断条件表达式是否成立,如果成立,true—>执行语句体
3)执行控制体语句,----->再次判断条件是否成立,如果成立,继续执行语句体
4)一直执行到条件判断表达式不成立,即为false的时候,循环语句结束…
注意事项:
判断条件语句的结果是一个boolean类型循环体语句如果是一条语句,大括号可以省略;
如果是多条语句,大括号不能省略。建议永远不要省略。
一般来说:有左大括号就没有分号,有分号就没有左大括号
2.2. while循环语句
while循环语句格式:
a)基本格式
while(判断条件语句) {
循环体语句;
}
b)扩展格式 (使用扩展格式)
初始化语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}
执行流程:
1)初始化语句进行变量赋值
2)判断条件是否成立,—>成立,执行循环体语句—>执行控制体语句
3)再次判断条件是否成立—>成立----->依次
4)一直条件条件不成立,结束!
for循环和while循环的区别 ?
1)如果明确循环的次数,使用for循环,否则使用while循环
2)从内存角度考虑,如果循环结束后,还想去访问那个变量,使用while循环
三、扩展知识点:死循环
死循环:也就是循环中的条件永远为true,死循环的是永不结束的循环。例如:while(true){}。
在后期的开发中,会出现使用死循环的场景,例如:我们需要读取用户输入的输入,但是用户输入多少数据我们并不清楚,也只能使用死循环,当用户不想输入数据了,就可以结束循环了,如何去结束一个死循环呢,就需要使用
到跳出语句了。
------------------------------------我是一条华丽的分割线~------------------------------------
讲了这么多理论知识,附上练习题吧
1.看程序,分析下面程序的结果:
int x = 2,y=3;
switch(x)
{
default:
y++;
case 3:
y++;
break;
case 4:
y++;
}
System.out.println(“y=”+y);
结果:y = 5
解答思路:case的穿透性
解答过程: default:
y++; // y = 3+1 = 4,没有break,继续
case 3:
y++; // y = 4+1 = 5
break; // 遇到break,结束
2.根据输入的值,判断当前季节(分别用if语句和switch语句实现)
//根据输入的值,判断当前季节,用if语句实现
import java.util.Scanner;
class IfDemo{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入月份:");
int a = sc.nextInt();
if (a >= 1 && a<= 12){
if (a == 3 || a == 4 || a == 5){
System.out.println("春季");
}
else if (a == 6 || a == 7 || a == 8){
System.out.println("夏季");
}
else if (a == 9 || a == 10 || a == 11){
System.out.println("秋季");
}
else if (a == 12 || a == 1 || a == 2){
System.out.println("冬季");
}
}
else{
System.out.println("非法数据");
}
}
}
//根据输入的值,判断当前季节,用switch语句实现
import java.util.Scanner;
class SwitchDemo{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入月份:");
int a = sc.nextInt();
switch(a){
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;
case 1:
System.out.println("冬季");
break;
case 2:
System.out.println("冬季");
break;
default:
System.out.println("非法数据");
break;
}
}
}
3.用for循环求1-100之间的偶数和
//用for循环求1-100之间的偶数和
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("1-100之间的偶数和为:"+sum);
System.out.println("------------------------");
//方法二:
int sum2 = 0;
for(int i = 2;i <= 100;i += 2){
sum2 += i;
}
System.out.println("1-100之间的偶数和为:"+sum2);
}
}
4.用for循环打印所有的水仙花数
/*
水仙花数:
指定的是三位数,
特点:个位数的立方+十位数的立方+百位数的立方之和是当前这个数据本身
举例
153=1*1*1 +5*5*5 +3*3*3
*/
class ForDemo2{
public static void main(String[] args){
int cnt = 0;
for(int i = 100;i < 1000;i++){
int ge = i %10;
int shi = i /10 % 10 ;
int bai = i /10/10 %10 ;
if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i){
cnt ++;
System.out.println("水仙花数为:"+i);
}
}
System.out.println("水仙花共有"+cnt+"个");
}
}
5.用while循环求
我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。请问,我折叠多少次,就可
以保证厚度不低于珠穆朗玛峰的高度?
class WhileDemo2{
public static void main(String[] args){
boolean isContinue = true;
double thickness = 0.01;
int cnt = 0;
while(isContinue){
thickness = thickness * 2;
cnt++;
if (thickness >= 8848){
isContinue = false;
}
}
System.out.println("需要折叠"+cnt+"次"+",折叠后的厚度为"+thickness+"m");
}
}
6:键盘录入x的值,计算出y的并输出。
x和y的关系满足如下:
x>=3 y = 2x + 1;
-1<=x<3 y = 2x;
x<=-1 y = 2x – 1;
import java.util.Scanner;
class ScannerDemo{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入X的值:");
int x = sc.nextInt();
int y = 0;
if (x >= 3){
y = 2*x + 1;
}
else if (x >= -1 && x < 3){
y = 2*x;
}
else if ( x <= -1){
y = 2*x - 1;
}
System.out.println("y的值为:"+y);
}
}
好了,今天的分享就到这了,期待后期的分享~ 文章中如有不对,欢迎指出留言