流程控制
1. 分类
- 顺序结构:自上而下顺序执行;
- 分支结构:满足一定条件执行,否则不执行;
- 循环结构:满足一定条件,重复执行;
2. 顺序结构
定义:代码按照自上而下顺序执行。
3. 分支结构
定义:满足一定条件,代码才执行,否则不执行。
-
分类
- if...else...
- switch
-
if结构:最简单的分支结构;
- 语法结构
if(判断条件){ 满足条件执行的代码 }
- 注意
- if是一个关键字,区分大小写;
- if后面必须在()号内放置一个boolean类型的值,或者返回值是boolean类型的表达式;
- if判断条件后面不能加;号,否则会导致后面的代码直接执行,与if条件无关;
- {}号中的内容可以是一句代码,也可以是多行代码;
public class ConditionalStatement { public static void main(String[] args) { // TODO Auto-generated method stub int age = 18; if(age>=18) { System.out.println("欢迎进入!"); } } }
-
if...else...结构:满足和不满足分别执行不同的代码;
- 语法结构
if(判断条件){ 满足条件执行的代码 }else{ // 否则 不满足条件执行的代码 }
- 注意
- if和else是一个组合,两个{}中的代码只会执行一个;
public class ConditionalStatement { public static void main(String[] args) { // TODO Auto-generated method stub int age = 16; if(age>=18) { System.out.println("欢迎进入!"); }else { System.out.println("禁止入内!"); } } }
-
if(){}else if(){}else if(){}...else{}结构
- 语法结构
if(条件1){ 满足条件1时候执行的代码 }else if(条件2){ 满足条件2时候执行的代码 }else if(条件3){ 满足条件3时候执行的代码 }...else{ 前面的条件都不满足时候执行的代码 }
- 注意
- 这是多重判断;
- 可以对多个值进行匹配;
- 如果匹配成功,只会执行其中一个满足条件的代码;
public class ConditionalStatement { public static void main(String[] args) { // TODO Auto-generated method stub int month = 4; if((month==3) || (month==4) || (month==5)){ System.out.println(month + "月份是春季"); }else if((month==6) || (month==7) || (month==8)){ System.out.println(month + "月份是夏季"); }else if((month==9) || (month==10) || (month==11)){ System.out.println(month + "月份是秋季"); }else if((month==1) || (month==2) || (month==12)){ System.out.println(month + "月份是冬季"); }else{ System.out.println(month + "月份不存在"); } } }
-
if嵌套:if条件语句中再次添加判断;
- 语法结构
if(条件1){ if(条件2){ 同时满足条件1和条件2时候执行的代码 }else{ 满足条件1,不满足条件2时候执行的代码 } }else{ 不满足条件1时候执行的代码 }
-
switch分支结构
- 语法结构
变量key; switch(key){ case value1: key==value1 时候执行的代码; break; case value2: key==value2 时候执行的代码 break; ... // 如果key和所有的value都不匹配,就执行default default: ... break; }
- 注意
- 与case搭配使用;
- 根据key不断匹配value值,如果匹配上则执行对应代码,其他不执行;
- case穿透
- 定义:case穿透是指在switch中一段代码执行结束后没有break结束,造成执行了其他case中代码的情况;
- 危害:可能会执行一些不相干的代码;
- 好处:当多个判断返回同一个结果的时候可以利用case穿透;
- default
- 在switch中,如果所有的case都没有匹配到key的值,就会执行default中的内容;
- default代码块可以放置在任意独立位置;
public class ConditionalStatement { public static void main(String[] args) { // TODO Auto-generated method stub int month = 4; switch(month){ case 12: case 1: case 2: System.out.println(month + "月份是冬季"); break; case 3: case 4: case 5: System.out.println(month + "月份是春季"); break; case 6: case 7: case 8: System.out.println(month + "月份是夏季"); break; case 9: case 10: case 11: System.out.println(month + "月份是秋季"); break; default: System.out.println(month + "不存在"); break; } } }
4. 循环结构
定义:满足一定条件下,可重复执行的语句。
-
分类
- for循环
- while循环
- do...while循环
-
for循环
- 语法结构
/** * 初始化语句:又叫循环前表达式 * 条件判断语句:又叫关系表达式 * 条件控制语句:又叫循环后表达式 */ for(初始化语句; 条件判断语句; 条件控制语句){ 循环体 }
- for循环执行流程
- 执行初始化语句
- 执行条件判断语句
- 如果返回true,就继续执行
- 如果返回false,就结束循环
- 执行循环体
- 执行条件控制语句
- 再次执行条件判断语句,重复循环
public class Forloop { public static void main(String[] args) { // TODO Auto-generated method stub //定义各位、十位、百位 int gw, sw, bw; //定义计数器 int count = 0; //for循环 for(int i = 0; i < 1000; i++) { //获取个位、十位、百位字面值 gw = i % 10; sw = i / 10 % 10; bw = i / 100; //判断是否为水仙花数 if((gw*gw*gw+sw*sw*sw+bw*bw*bw) == i) { System.out.println(i + "是一个水仙花数"); count++; } } System.out.println("1000以内一共有"+count+"个水仙花数"); } }
-
注意事项
- 初始化语句,在循环开始前执行,无论循环多少次,只执行一次
- 条件判断语句,其结果必须是boolean值
- 循环体,如果只有一句话,花括号可省略,建议不要省略
- 条件控制语句,在循环体执行完之后执行
-
for循环特殊形式
- 条件判断语句省略,无限循环
//条件永为true for(i=1; ;i++){}
- 条件控制语句省略,无限循环
//条件永为true for(int i = 1; i<=100;){}
- 初始化语句和条件控制语句省略,无限循环
for(;true;){}
- 条件判断语句和条件控制语句省略,无限循环
for(int i = 1;;){}
- 三个语句都省略
//相当于while(true)语句 for(;;){}
-
while循环
- 语法结构
初始化语句 while(条件判断语句){ 循环体 条件控制语句 }
- while循环执行流程
- 执行初始化语句
- 执行条件判断语句
- 如果是true,就继续执行
- 如果是false,就结束循环
- 执行循环体
- 执行条件控制语句
- 再执行条件判断语句,重复循环
public class Whileloop { public static void main(String[] args) { // TODO Auto-generated method stub int i = 1; int sum = 0; while(i <= 100) { sum += i; i++; } System.out.println(sum); } }
-
注意事项
- 一般将while循环看作是for循环的简写格式
- 一般在循环次数不明确的情况下使用
- 条件控制语句也属于循环语句
while循环特殊形式
//当条件判断语句一直是true,while进入死循环 while(true){}
-
do...while循环
- 语法结构
初始化语句 do{ 循环体 条件控制语句 }while(条件判断语句);
-
do...while循环执行流程
- 执行初始化语句
- 执行循环体
- 执行条件控制语句
- 执行条件判断语句
- 如果为true,就继续循环
- 如果为false,就结束循环
-
注意事项
- 无论条件是否成立,都会执行循环体,直到条件判断语句为false结束
- 所以,循环体至少执行一次
-
break、continue和return关键字
-
break作用
- 在switch语句和循环中使用
- 结束switch语句或终止并跳出循环
- 只能终止所在循环体,不能终止父循环
-
continue作用
- 终止本次循环,并跳过本次循环continue后的代码,进入下轮循环
-
return作用
- 返回,是与方法对应的,可写在方法体的任意地方
- 结束整个方法,return后的代码都不执行
break和continue也可用于父循环
public static void main(String[] args) { w:for (int i = 0; i < 10; i++ ) { //外循环语句 System.out.println("外循环语句.....前"); for (int j = 0; j < 10; j++) { break w; } System.out.println("外循环语句.....后"); } }
-
键盘录入-Scanner
作用:给用户提供输入的通道。
1. 使用
- 导包:
import java.util.Scanner
; - 创建键盘录入对象:
Scanner input = new Scanner(System.in)
; - 提示用户输入内容:
System.out.println("请输入任意内容:")
; - 获取用户输入内容:
String str = input.next()
; - 使用所获取的数据;
//1、导包
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//2、创建键盘录入对象
Scanner input = new Scanner(System.in);
//3、提示用户输入内容
System.out.println("请输入任意内容:");
//4、获取用户输入内容
String str = input.next();
//使用所获取的数据
System.out.println(str);
}
}
2. 注意
- 不同的方法接受不同类型的参数,
input.next() //获取任意内容,格式都会变成String字符串类型
input.nextInt() //获取整型int内容
input.nextDouble() //获取double类型内容
input.nextBoolean() //获取boolean类型内容