零基础学java(3)——流程控制语句结构


流程控制语句结构:

顺序结构:从上到下,顺序执行

分支结构:根据选择不同,执行不同的代码。if…else和switch…case

循环结构:根据条件循环重复执行某段代码。for(普通for和增强for)、while和do…while三种

一.顺序结构

(在同一个方法中)从上往下执行

/*
流程控制语句结构:
1、顺序:(在同一个方法中)从上往下执行
	从键盘输入一个值,并打印输出
2、分支
3、循环

用核心类库中的类:String,System,Math,Scanner等
如果这个类型定义在java.lang包下,那么直接使用,无需导包,直接使用简名称
但是如果这个类型定义在其他包下,那么需要写全名称或导包
全名称:java.util.Scanner
*/
//导包语句:
//格式:import 包.类名;
//位置:必须在源文件的上面,在class的上面
import java.util.Scanner;

class TestStatement{
    
    
	public static void main(String[] args){
    
    
		System.out.println("欢迎使用尚硅谷登记系统:");
		System.out.println("请输入个人信息:");
		
		//System.out.println(Math.pow(2,3));
		
		//Scanner键盘输入的工具类
		//input是一个变量名,自己命名
		//方式一:全名称
		//java.util.Scanner input = new java.util.Scanner(System.in);
		
		//方式二:导包,简名称
		Scanner input = new Scanner(System.in);
		
		System.out.print("请输入年龄:");		
		int age = input.nextInt();		
		System.out.println("您的年龄是:" + age);
		
		System.out.print("请输入入学成绩:");		
		double score = input.nextDouble();		
		System.out.println("您的分数是:" + score);
		
		System.out.print("请告知我是否帅/美:");		
		boolean	flag = input.nextBoolean();		
		System.out.println("帅/美否:" + flag);
		
		System.out.print("请输入您的姓名:");
		String name =  input.next();
		System.out.println("您的名字是:"+name);
	}
}

二.复合语句

与C语言及其他语言相同,Java语言的复合语句是以整个块区为单位的语句,所以又称为块语句。复合语句由开括号“{
    
    ”开始,闭括号“}”结束。
复合语句中的每一语句都是从上到下执行。复合语句以整个块为单位,并且在复合语句中可以嵌套复合语句。
Java代码结构:
class{
    
    
{
    
    	
//代码块
}
方法签名{
    
    
//方法体
}
内部类{
    
    
内部类体
}
}
复合语句为变量创建了一个作用域。在该作用域中某个变量被创建并能够使用,如果在某个变量的作用域外使用该变量,则会发生错误。

三.分支结构

1.条件语句

1.if但分支语句

语法格式:
if(条件表达式){
    
    
//当条件表达式结果为true时,需要执行的语句块
}
说明:
(1)条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量。
(2)语句块只有一个语句时,{
    
    }可以省略,但是建议保留
执行过程:
条件成立就执行,条件不成立就不执行。

在这里插入图片描述

2.if…else双分支条件语句

语法格式:
if(条件表达式){
    
    
//当条件表达式结果为true时,需要执行的语句块1
}else{
    
    
//当条件表达式结果为false时,需要执行的语句块2
}
执行过程:
当条件成立执行语句块1,不成立执行语句块2

在这里插入图片描述

说明:
(1)条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量。
(2)if或else的语句块只有一个语句时,{}可以省略,但是建议保留

3.if…else if多分支条件语句

语法结构:
if(条件表达式1){
    
    
//当条件表达式1结果为true时,需要执行的复合语句1
}else if(条件表达式2){
    
    
//当条件表达式2结果为true时,需要执行的复合语句2
}
....else{
    
    
//当上述条件表达式结果都为false时,需要执行的语句
}】
执行过程:
从上至下判断条件,如果一旦某个条件成立了,就执行对应的语句块,后面的条件就不看了,如果所有条件都不满足,如果存在else,那么执行else,如果不存在else,就什么也不执行。
注意:
(1)每个if或者else后面的{
    
    }不是必须的,但是如果没有{
    
    },默认只能带一条语句。即ifelse后面的语句块只有一条语句时,可以省略{
    
    },但是可读性不够好。
(2)最后的else不是必须的,可以缺省
(3)当多个条件是互斥关系时,顺序无所谓
     当多个条件是包含关系时,“小上大下/子上父下”

在这里插入图片描述

public static void main(String[] args) {
    
    
		int score = 89;
		if(score>90){
    
    
			System.out.println("优秀");
		}else if(score>80){
    
    
			System.out.println("良好");
		}else if(score>60){
    
    
			System.out.println("及格");
		}else{
    
    
			System.out.println("不合格");
		}
	}

public static void main(String[] args) {
    
    
		int score = 89;
		if(score>90 && score<=100){
    
    
			System.out.println("优秀");
		}else if(score>80 && score<=90){
    
    
			System.out.println("良好");
		}else if(score>60 && score<=80){
    
    
			System.out.println("及格");
		}else{
    
    
			System.out.println("不合格");
		}
	}

4.嵌套

if...else系列语句可以嵌套,在任意一个语句块中都可以再嵌套其他的条件语句。
执行特点:
当外层条件满足时,内层条件才判断

2.选择结构

语法结构:
switch(表达式){
    
    
case 常量值1//执行语句块1
[break;]
case 常量值2//执行语句块2
[break;]
    ......
case 常量值n:
//执行语句块n
[break;]default//执行缺省语句
[break;]}

在这里插入图片描述

注意:
(1)表达式返回的结果类型只能是byteshortcharint,枚举(JDK1.5之后),String(JDK1.7之后)
(2)表达式返回的结果的类型需要与case后的值的类型保持一致
(3case后面只能跟常量值,不能是变量值或不确定的表达式值
(4)同一个switch语句,case的常量值必须互不相同
(5break是可选的,当表达式返回结果与某个case后的值进行匹配成功后,执行相应分支的语句,一旦进入某个分支后,只有直到遇到break才会退出switch,否则将会继续执行下一个case的语句。
(6default是可选的。位置也不一定是最后,也可以在任意case的位置。但是不管再哪里,都是要所有case的常量值不匹配后才会进入default分支,一旦进入default分支,也是需要遇到breakswitch的闭括号“}”才会停止。
总结:switch的入口,表达式值与某个case匹配,或都不匹配,从default进入。
      switch的出口,遇到break或者switch的闭括号“}”结束

3、条件判断与选择结构的选择

当条件判断是等值判断,并且表达式的结果是byte,short,char,int,枚举,String类型的时候,用switch会更合适,
其他都使用条件判断
可以使用switch...case的,肯定可以使用if...else,返回来不一定。

四.循环结构

循环语句就是在满足一定条件的情况下反复执行某一个操作。在Java中提供了3中常用的循环语句,分别是while循环语句、do…while循环语句和for循环语句。

1、三种循环语句的语法

while循环语句

语法结构:
while(条件表达式){
    
    
//循环体语句块
}
执行过程:
(1)先判断循环条件
(2)条件成立,执行循环体语句块
(3)回到(1)
(4)直到条件不成立,结束while循环

do…while循环语句

语法结构:
do{
    
    
//循环体语句块
}while(条件表达式);
执行过程:
(1)先无条件执行一次循环体语句块
(2)再判断循环条件
(3)条件成立,再次执行循环体语句块
(4)回到(2)
(5)直到条件不成立,结束do...while循环

先执行一次循环体后,再判断条件,如果条件成立,继续下一次循环体,因此do...while循环至少执行一次循环体。

for循环结构

语法结构:
for(初始化表达式1; 循环条件表达式2; 迭代表达式3){
    
    
//循环体语句块
}
执行过程:
(1)执行初始化表达式12)判断循环条件表达式23)如果条件成立,执行循环体语句块
(4)执行迭代表达式35)重复(2)(3)(4)(5)
(6)直到循环条件不成立,结束for循环
注意:
	两个分号必不可少
	三个表达式可以省略,但要结合break,否则死循环。
	表达式1可以有多个变量声明,但必须是同一个类型,用逗号分隔
	表达式3可以有多个变量更新,用逗号分隔

foreach循环结构(后面数组和集合部分再讲)

语法结构:
for(元素类型 元素临时名:数组/集合){
    
    
//循环体
}

2.三种循环语句的比较

在这里插入图片描述

都能实现循环重复执行某段代码,可以互相转换

执行顺序不同:forwhile是先判断后执行,do...while是先执行后判断
执行效果不同:whilefor,如果第一次条件判断不满足,那么循环体将一次都不执行,而do...while是先执行一次循环体,然后才判断条件,看是否第二次执行循环体

执行效率不同:do...while效率最高
每一种循环都有四个循环要素,而for循环体现的最明显,循环变量初始值,循环条件,循环体,循环变量更新迭代。
for循环适用于循环次数比较明确的,而do...while适用于至少执行一次的循环。while适用于循环条件比较明确的。

3、嵌套循环

一个循环体中嵌套了另一个完整的循环结构。一个循环充当另一个循环的循环体。
三种循环体中都可以嵌套另外任意一种循环结构
执行特点,先执行外层循环,外循环执行一次,内循环从头至尾执行一轮。总次数=外循环次数*内循环次数,详细说:总次数= 内循环第一轮的次数+内循环第二轮的次数+内循环第三轮的次数.....+内循环第n轮的次数。轮数即是外循环的次数。

例如:找出1000以内的所有完数
分析:(11-1000个数需要判断是否是否是完数,因此需要循环1000for(int i=1; i<=1000;i++){
    
    
 //i是否是完数
 //如果是,就打印i,如果不是就不打印i
      }2)i是否是完数的判断,要把i的所有因子找出来,并相加
int sum = 0;
for(int j=1; j<i; j++){
    
    
if(i%j==0){
    
    
	sum += j;
 }
          }3)如果是,就打印i
          if(sum == i){
    
    
 System.out.println(i);
          }

4、跳转

break:只能用在switch或循环中,用于跳出所在的当层循环或switch
continue:只能用于循环中,提前结束本次循环,继续下一次循环
return:用于结束当前方法

public class TestBreakAndContinue {
    
    
	public static void main(String[] args) {
    
    
		for (int i = 1; i <=5; i++) {
    
    
			for (int j = 1; j <=5; j++) {
    
    
				System.out.print("*");
				if(i==j){
    
    
					break;
				}
			}
			System.out.println();
		}
	}
}


输出结果:
*
**
***
****
*****


public class TestBreakAndContinue {
    
    
	public static void main(String[] args) {
    
    
		for (int i = 1; i <=5; i++) {
    
    
			for (int j = 1; j <=5; j++) {
    
    
				System.out.print("*");
				if(i==j){
    
    
					continue ;
				}
			}
			System.out.println();
		}
	}
}

输出结果:
*****
*****
*****
*****
*****

おすすめ

転載: blog.csdn.net/weixin_43912367/article/details/117020743