目录
流程控制语句结构:
顺序结构:从上到下,顺序执行
分支结构:根据选择不同,执行不同的代码。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后面的{
}不是必须的,但是如果没有{
},默认只能带一条语句。即if或else后面的语句块只有一条语句时,可以省略{
},但是可读性不够好。
(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)表达式返回的结果类型只能是byte,short,char,int,枚举(JDK1.5之后),String(JDK1.7之后)
(2)表达式返回的结果的类型需要与case后的值的类型保持一致
(3)case后面只能跟常量值,不能是变量值或不确定的表达式值
(4)同一个switch语句,case的常量值必须互不相同
(5)break是可选的,当表达式返回结果与某个case后的值进行匹配成功后,执行相应分支的语句,一旦进入某个分支后,只有直到遇到break才会退出switch,否则将会继续执行下一个case的语句。
(6)default是可选的。位置也不一定是最后,也可以在任意case的位置。但是不管再哪里,都是要所有case的常量值不匹配后才会进入default分支,一旦进入default分支,也是需要遇到break或switch的闭括号“}”才会停止。
总结: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)执行初始化表达式1
(2)判断循环条件表达式2
(3)如果条件成立,执行循环体语句块
(4)执行迭代表达式3
(5)重复(2)(3)(4)(5)
(6)直到循环条件不成立,结束for循环
注意:
两个分号必不可少
三个表达式可以省略,但要结合break,否则死循环。
表达式1可以有多个变量声明,但必须是同一个类型,用逗号分隔
表达式3可以有多个变量更新,用逗号分隔
foreach循环结构(后面数组和集合部分再讲)
语法结构:
for(元素类型 元素临时名:数组/集合){
//循环体
}
2.三种循环语句的比较
都能实现循环重复执行某段代码,可以互相转换
执行顺序不同:for、while是先判断后执行,do...while是先执行后判断
执行效果不同:while和for,如果第一次条件判断不满足,那么循环体将一次都不执行,而do...while是先执行一次循环体,然后才判断条件,看是否第二次执行循环体
执行效率不同:do...while效率最高
每一种循环都有四个循环要素,而for循环体现的最明显,循环变量初始值,循环条件,循环体,循环变量更新迭代。
for循环适用于循环次数比较明确的,而do...while适用于至少执行一次的循环。while适用于循环条件比较明确的。
3、嵌套循环
一个循环体中嵌套了另一个完整的循环结构。一个循环充当另一个循环的循环体。
三种循环体中都可以嵌套另外任意一种循环结构
执行特点,先执行外层循环,外循环执行一次,内循环从头至尾执行一轮。总次数=外循环次数*内循环次数,详细说:总次数= 内循环第一轮的次数+内循环第二轮的次数+内循环第三轮的次数.....+内循环第n轮的次数。轮数即是外循环的次数。
例如:找出1000以内的所有完数
分析:(1)1-1000个数需要判断是否是否是完数,因此需要循环1000次
for(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();
}
}
}
输出结果:
*****
*****
*****
*****
*****