顺序结构

顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。

选择结构

也被称为分支结构,选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。

Java语言提供了两种选择结构语句if语句和switch语句。

if语句

第一种格式: if(关系表达式) {

语句体;

}

执行流程: 首先判断关系表达式看其结果是true还是false

如果是true就执行语句体

如果是false就不执行语句体

案例:

public class IfDemo1 {

	public static void main(String[] args) {
		      int a = 30;
		      int b = 20;
		      
		      int max = a;
		      
		      if(a<b) {
		    	     max = b;
		      }
		      
		      System.out.println("最大值为:" + max);
	}

}

注意事项

关系表达式无论简单还是复杂,结果必须是boolean类型

if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。

一般来说:有大括号就没有分号,有分号就没有大括号

第二种格式:if(关系表达式) {

语句体1;

}else {

语句体2;

}

执行流程:首先判断关系表达式看其结果是true还是false

如果是true就执行语句体1

如果是false就执行语句体2

案例:

import java.util.Scanner;

class IfDemo2 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("你学会流程控制语句了吗?(true/false)");
		boolean re = sc.nextBoolean();
		if (re) {
			System.out.println("自从学会了流程控制语句,妈妈再也不用担心我的学习了");
		} else {
			System.out.println("看资料还是隔壁老王好!!!");
		}
		System.out.println("over");
	}
}

If语句和三元运算符

三元运算符根据比较判断后,给出的也是两个结果,所以,这种情况和if语句的第二种格式很相似,他们在某些情况下应该是可以相互转换的。

if语句第二种格式和三元运算符:三元运算符的操作都可以使用if语句改进,反之不成立

什么时候不成立呢?

当if语句控制的语句体是一条输出语句的时候,就不成立。因为三元运算符是一个运算符,必须要求有一个结果返回。

而输出语句却不能作为一个返回结果。

案例:

class IfAndSan{
	     public static void main(String[] args){
			 int a = 10;
			 int b = 20;
			/* if(a == b){
				 System.out.println(b);
			 }else{System.out.println(a);}  
			 */
			 System.out.println((a == b)?a:b);
		 }
}

第三种格式:

if(关系表达式1) {
                 语句体1;

	}else  if (关系表达式2) {

               	语句体2;

	}

   		  …

	else {

               	语句体n+1;

	}

执行流程:首先判断关系表达式1看其结果是true还是false

如果是true就执行语句体1

如果是false就继续判断关系表达式2看其结果是true还是false

如果是true就执行语句体2

如果是false就继续判断关系表达式…看其结果是true还是false

如果没有任何关系表达式为true,就执行语句体n+1。

案例:

import java.util.Scanner;

public class IfDemo3 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		System.out.println("请输入一个月份");
		int month = sc.nextInt();

		if (month > 12 || month < 1) {
			System.out.println("月份不对,是不是和老王一样爱喝假酒");
		} else if (month >= 3 && month <= 5) {
			System.out.println("春天到了,又到了...老王是正经人");
		} else if (month >= 6 && month <= 8) {
			System.out.println("夏天来了,热的发慌啊");
		} else if (month >= 9 && month <= 11) {
			System.out.println("金秋时节,又到了收获的时候");
		} else {
			System.out.println("北方的冬天太冷,我找不到足够的衣裳过冬");
		}
	}

}

switch语句

格式:switch(表达式) {

case 常量值1:

语句体1;

break;

case 常量值2:

语句体2;

break;

default:

语句体n+1;

break;

}

执行流程:1.首先计算出表达式的值

2. 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就束。

3.最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

4.表达式的类型:byte,short,int,char,枚举 JDK7: String

案例:

public class SwitchDemo {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("快输入一个月份好让老王给你看看是几月");
		int month = sc.nextInt();
		
		switch(month) {
		case 1:
		case 2:
		case 12:
			System.out.println("冬季");
			break;
		case 3:
		case 4:
		case 5:
			System.out.println("春季");
			break;
		case 6:
		case 7:
		case 8:
			System.out.println("夏季");
			break;
		case 9:
		case 10:
		case 11:
			System.out.println("秋季");
			break;
		default:
			System.out.println("你和你王哥不是一个地理位置");
			break;
		}
	}

}

注意事项:

1. case后面只能跟常量,不能跟变量

2. 多个case后面的常量值不能相同

3. case的顺序有要求么? 没有,可以放到任意位置

4. default一定放在最后么? **也不是,**可以放到任意位置

5. default 可以省略么? 可以

6. break是否可以省略,可以省略,如果省略的话,代码会继续向下执行,不管下面的case是否匹配成功,一直执行到再次遇到break,或者是执行到了switch语句结束

7. switch语句何时结束: 遇到break, 或者代码执行到了switch语句的最后