一、流程控制分类
- 顺序结构:程序从上到下执行
- 分支结构:根据条件,选择性的执行某段代码
(1)if-else
(2)switch-case - 循环结构:根据循环条件,重复性执行某段代码
(1)for
(2)while
(3)do-while
(4)增强for循环(集合的时候讲)
二、分支结构 - if-else条件判断结构
结构:
if(条件表达式){
执行语句1;
}else if(条件表达式){
执行语句2;
}else if(条件表达式){
执行语句3;
}
……
else {
执行语句n;
}
【说明】
(1)esle结构是可选的
※ 如果多个条件表达式之间没有任何交集,此时多个表达式声明顺序没有区别
※ 如果多个条件表达式之间有交集,此时多个表达式声明顺序有区别,根据实际情况而定
※ 如果条件表达式之间是包含关系,若希望范围小的有机会执行,则要先声明范围小的条件表达式
(2)if-else结构可以相互嵌套
(3)如果执行语句中只有一条执行语句,{}可以省略,但是不建议省略
(4)else就近配对 - switch-case条件判断语句
switch(表达式){
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
… …
case 常量N:
语句N;
break;
default:
语句;
break;
}
【说明】
(1)break可省略;break可以使用在switch-case结构中,表示结束当前switch-case结构的执行
(2)switch中的表达式不是条件表达式
(3)根据表达式中的值,依次匹配case中的常量,一旦匹配成功,就进入相应的case中执行语句,执行完此case后,如果有break,就跳出当前的switch-case结构;
如果没有break,就依次执行下面的case,直到遇到break或程序执行结束才停止
(4)switch中表达式的类型只能是:byte\short\char\int\枚举对象(jdk5.0)\String(jdk7.0)
(5)default:类似于if-else中的else结构。default结构也是可选的、位置是灵活的
(6)如果多个case语句的执行结构相同,则可以考虑合并。
(7)case结构中可以不使用break
(8)凡是使用switch-case结构能实现的分支语句都可以转换为if-else。反之不成立
(9)当满足switch中表达式的数据类型(6种),同时变量的取值也不多时,建议使用switch-case语句,执行效率高
三、循环结构 - 在某些条件满足的情况下,反复执行特定代码
- 循环结构必须包含的4个要素
① 初始化条件
② 循环条件------>boolean类型
③ 循环体
④ 迭代条件 - for循环
【结构】
for(①;②;④ ){
③
}
【执行顺序】①—>②—>③ —>④—>②—> ③ —> ④—>…—> ②
【循环结束的条件】
循环条件的返回值为false,退出循环 - while循环
【结构】
①;
while(②){
③;
④ ;
}
【执行顺序】① -> ② -> ③ -> ④ -> ② -> ③ -> ④ ->…-> ②
【总结】
(1)只要涉及到循环结构,都可以考虑使用for或while来实现
(2)for循环和while循环可以相互转换
(3)初始化条件的有效性:for循环,只在作用域内有效;while循环,出了while循环以后仍然有效 - do-while循环
【结构】
①;
do{
③;
④ ;
}while(②);
【执行顺序】① --> ③ --> ④ --> ② --> ③ --> ④ --> … --> ②
【区别于for循环和while循环】
do-while循环至少会执行一次循环体! - “无限循环”结构
【常见结构】
for(;;)
while(true)
【如何结束一个循环?】
方式一:当循环条件返回值为false,退出循环
方式二:使用break关键字跳出循环
实际情况中:
for(int i = 1;i <= 10;i++){
if(i % 4 == 0){
break;
}
}
或
boolean isFlag = true;
while(isFlag){
if(i == 4){
isFlag = false;
}
}
注意:
如果一个循环结构不能跳出循环就是一个死循环,要避免
12. 嵌套循环
(1)如果外层循环执行m次,内层循环n次,则内层循环的循环体循环m*n次
(2)技巧:对于二重嵌套来说,外层控制行数,内层控制列数
【典型练习】
例题1:
******
******
******
******
例题2:
*
**
例题3:九九乘法表
例题4:100以内所有质数的输出
【补充】break和continue
【从键盘获取不同类型的变量】
使用Scanner类:
步骤:
1.导包:import java.util.Scanner;
2.Scanner类的实例化(创建对象):Scanner scan = new Scanner(System.in);
3.调用Scanner类提供的相关方法,获取不同类型的变量
说明:
1.scan为变量名,可自定义
2.不能使用Scanner来获取char类型变量,可以获取String型替代
3.如果输入的类型和要求获取的类型不匹配,则报错:InputMisMatchException
//1.导包:
import java.util.Scanner;
class ScannerTest{
public static void main(String[] args){
//2.Scanner类的实例化
Scanner scan = new Scanner(System.in);
//3.调用Scanner类提供的相关方法,获取不同类型的变量
System.out.println("请输入年龄:");
int age = scan.nextInt();
System.out.println("age = " + age);
System.out.println("请输入你的名字:");
String name = scan.next();
System.out.println("name= " + name);
System.out.println("请输入你的体重(公斤):");
double weight = scan.nextDouble();
System.out.println("Weight = " + weight);
System.out.println("你是男的吗?(true/false)");
boolean isYES = scan.nextBoolean();
System.out.println("isYES = " + isYES);
}
}