1. 分支结构
1.1 概述
顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构
1.2 分支结构1: if…else
1.2.1 形式
单分支
if(判断条件boolean){
true执行代码块;
}
多分支
if(判断条件){
代码块;
}else{
代码块;
}
if(判断条件1){
代码1。。。
}else if(条件2){
代码2。。。
} else if(判断条件3){
代码3。。。
}else{
代码4。。。
}
嵌套分支
if(判断条件1){
if(条件){
代码1。。。
}
}
1.2.2 案例:统计学生得分
public static void main(String[] args) {
System.out.println("请输入学生成绩");
double score = new Scanner(System.in).nextDouble();
if (score >= 100 || score <= 0) {
System.out.println("请输入0~100以内的值");
}
if (score > 90 && score <= 100) {
System.out.println("优秀");
} else if (score >= 80 && score <= 90) {
System.out.println("良好");
} else if (score >= 70 && score <= 79) {
System.out.println("中等");
} else if (score >= 60 && score <= 69) {
System.out.println("及格");
}else if (score < 60) {
System.out.println("不及格");
}
}
1.3 分支结构2: switch…case
当一个case成立,从这个case向后穿透所有case,包括default,直到程序结束或者遇到break程序才结束
1.3.1 形式
switch(变量或表达式expression){
case 值1:
代码块;
break; //执行完中断,否则会一直向下执行
case 值2:
代码块;
break;
case 值3:
代码块;
break;
default:
代码块;
}
1.3.2 规则
- switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
- switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
- case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
- 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
- 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行
- case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break语句。
- switch 语句可以包含一个 default 分支,该分支一般是 switch语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default分支不需要 break 语句。
1. 循环结构
顺序结构的程序语句只能被执行一次。如果想要同样的操作执行多次,,就需要使用循环结构
1.1 循环结构1: while
先判断,再执行,只要布尔表达式为 true,循环就会一直执行下去
1.1.1 形式
while( 布尔表达式 ) {
//循环内容
}
1.1.2 案例:猜数字
public static void main(String[] args) {
System.out.println("猜1~1000的随机数");
//系统产生随机数,从1开始,要加1
int i = new Random().nextInt(1000)+1;
while(true){
//接收用户输入的值
int sc = new Scanner(System.in).nextInt();
//判断
if(sc>i){
System.out.println("猜大了");
}else if(sc<i){
System.out.println("猜小了");
}else{
System.out.println("猜对了");
break; //退出循环
}
}
}
1.2 循环结构2: do…while
先执行,在判断,与while 循环相似,不同的是,do…while 循环至少会执行一次
1.2.1 形式
do {
//代码语句
}while(布尔表达式);
**注意:**布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了。 如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false
1.2.2 实例
public static void main(String args[]){
int x = 10;
do{
System.out.println("value of x : " + x );
x++;
}while( x < 20 );
}
执行结果:
value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19
1.3 循环结构3: for循环
1.3.1 形式
for(初始化; 布尔表达式; 更新条件) {
//代码语句
}
1.3.2 实例:
//打印0-10
for (int i = 0; i <= 10; i++) {
System.out.print(i);
}
//打印10-0
for (int i = 10; i >= 0; i--) {
System.out.print(i);
}
//打印8,88,888,8888
for(int i=8;i<=10000;i=i*10+8){
System.out.println(i);
}
1.3.3 for循环说明
- 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
- 然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
- 执行一次循环后,更新循环控制变量。
- 再次检测布尔表达式。循环执行上面的过程。
1.4 循环结构4: 嵌套for循环
根据外层的条件,判断里层能否执行,如果能执行,就把里层代码都循环完毕后,再继续执行外层,继续判断
1.4.1 形式
for(…){
for(…){
}
}
1.4.2 入门案例
/*
*当i=1时,j取到了所有满足条件的数据,1,2,3,4,5
*当i=2时,j取到了所有满足条件的数据,1,2,3,4,5,以此往下
*/
public static void main(String[] args) {
for(int i=1;i<=3;i++){//外循环执行1次
System.out.println("i="+i);//1,2,3
for(int j=1;j<=5;j++){//内循环执行多次
System.out.println("j="+j);//1,2,3,4,5
}
}
}
总结:
- 外循环执行1次,内循环执行多次
- 外循环控制行,内循环控制列
1.4.3 拓展练习
- 打印正方形
for (int i = 1; i < 5; i++) {
for (int j = 1; j < 5; j++) {
System.out.print("*");
}
System.out.println();
}
- 打印左直角三角形
for (int i = 0; i < 5; i++) {//外循环,控制行,是一定的
for (int j = 0; j <= i; j++) {//内循环,列是不固定的,是递增的
System.out.print("*");//保证第一行打印出来一个*,注意条件
}
System.out.println();
}
- 打印99乘法表
for (int i = 1; i <= 9; i++) {//外循环,控制行,是一定的
for (int j = 1; j <= i; j++) {//内循环,列是不固定的,是递增的
System.out.print(j+"*"+i+"="+i*j+" ");//保证第一行打印出来一个*,注意条件
}
System.out.println();
}
1.5 循环结构5: 增强for循环
Java5 引入了一种主要用于数组的增强型 for 循环
1.5.1 形式
for(声明语句 : 表达式){
//代码句子
}
**声明语句:**声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等
**表达式:**表达式是要访问的数组名,或者是返回值为数组的方法
1.5.2 实例
public static void main(String args[]){
int [] numbers = {10, 20, 30, 40, 50};
for(int x : numbers ){
System.out.print( x );
System.out.print(",");
}
System.out.print("\n");
String [] names ={"James", "Larry", "Tom", "Lacy"};
for( String name : names ) {
System.out.print( name );
System.out.print(",");
}
}
结果:
10,20,30,40,50,
James,Larry,Tom,Lacy,
1.6 while,do…while,for三种循环的区别
三种循环都可以互相代替
1、 for:知道循环次数
2、 while/do while:当循环次数不确定时
3、 while:先判断,不符合规则,不执行代码
4、 do while:代码最少被执行一次,再去判断,符合规则,再次执行代码
3.break和continue关键字
3.1 break(中断当前循环)
- break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。
- break 跳出最里层的循环,并且继续执行该循环下面的语句。
3.2 continue(跳出本次循环,进入下一轮)
- continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。
- 在 for 循环中,continue 语句使程序立即跳转到更新语句。
- 在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。