在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说程序的流程对运行结果有直接的影响。所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能。
流程控制语句分类
顺序结构
选择结构
循环结构
顺序结构:
是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。 总的来说:写在前面的先执行,写在后面的后执行
public class Cherris {
public static void main(String[] args) {
System.out.println("开始");
System.out.println("语句A");
System.out.println("语句B");
System.out.println("语句C");
System.out.println("结束");
}
}
顺序结构:
开始
语句A
语句B
语句C
结束
选择结构
也被称为分支结构。
选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
Java语言提供了两种选择结构语句:
if语句
switch语句
选择结构:if语句
if语句有三种格式
if语句第一种格式:
if(关系表达式)
{
语句体
}
执行流程
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体
如果是false就不执行语句体
public class Cherris {
public static void main(String[] args) {
System.out.println("开始");
int a=10;
int b=15;
if (a>b){
System.out.println("a大于b");
}
int c=10;
if (a==c){
System.out.println("a等于c");
}
System.out.println("结束");
}
}
注意事项:
1.关系表达式无论简单还是复杂,结果都是boolean类型。
2.if语句控制的如果是一条语句,大括号可以省略;如果是多条语句就不能省略,建议永远不要省略。
3.一般来说有左大括号就没有分号,有分号就没有左大括号。
if语句第二种格式:if……else
if(关系表达式) {
语句体1;
}else
{
语句体2;
}
执行流程 首先判断关系表达式看其结果是true还是false
如果是true就执行语句体1
如果是false就执行语句体2
public class Cherris {
public static void main(String[] args) {
System.out.println("开始");
int a=10;
int b=15;
if (a>b){
System.out.println("a大于b");
}else
{
System.out.println("a小于c");
}
System.out.println("结束");
}
}
奇偶数:
从键盘输入一个数判断是奇数还是偶数
import java.util.Scanner;
public class Cherris {
public static void main(String[] args) {
Scanner xc=new Scanner(System.in);
System.out.println();
int number = xc.nextInt();
if (number%2==0){
System.out.println("number:"+"偶数");
}else {
System.out.println("number:"+"奇数");
}
}
}
if语句第三种格式:if……else if……if:
输入月份,确认季节。
import java.util.Scanner;
public class Cherris2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
if (month<1 | month>12){
System.out.println("输入的数字有误");
}else if (month<=5&month>3){
System.out.println("spring");
}else if (month>5&month<=8){
System.out.println("summer");
}else if (month>8&month<=11){
System.out.println("aultume");
}else if (month>11|month<3){
System.out.println("winter");
}
}
}
三种方式比大小:if……else if……else if嵌套 三目运算实现
import java.util.Scanner;
public class Cherris2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数据");
int score1 = sc.nextInt();
System.out.println("请输入第二个数据");
int score2 =sc.nextInt();
System.out.println("请输入第三个数据");
int score3 = sc.nextInt();
if(score1>score2){
System.out.println("最大值:"+score1);
}else if(score2>score3){
System.out.println("最大值:"+score2);
}else {
System.out.println("最大值;"+score3);
}
System.out.println("==============嵌套====================");
if(score1>score2){
if(score1>score3){
System.out.println("max"+score1);
}else{
System.out.println("max"+score3);
}
}else{if (score2>score3){System.out.println("max"+score2);}
else {System.out.println("max"+score3);}
}
System.out.println("===============三目运算实现=============");
int a=(score1>score2)?score1:score2;
int b=(score3>a)?score3:a;
System.out.println("big"+b);
}
}
switch语句:
1、switch:表示这一个选择结构语句
2、表达式:
这里的表达式一定会有一个结果值,但是这里结果数据类型只能是byte,short,int,char,JDK之后可以是枚举,JDK1.7之后可以是String
3、case:
switch中匹配的使用关键字
4、常量值:
要被匹配的值,注意:这里只能是常量值,不能是变量!!!
5、语句体:
当匹配到对应的常量值后,执行对应的语句体内容,语句体可以是一条也可以是多条。
6、break:
跳出(结束)switch选择结构。
7、default:
当所有的case都不匹配表达式中的值的是,默认最后执行default中语句体。
执行流程:******
1、首先会计算表达式中的值
2、依次去匹配case中的常量值
3、当匹配到的时候,执行对应的语句体内容
4、如果所有的case都不匹配,最后再执行default中的语句体。
5、遇到break或者执行完代码结束switch选择。
注意事项:
1、break可以不写吗?可以,但是会发生”穿透“
2、default可以不写吗?可以,但是不建议,代码不够严谨,什么情况下可以不写,当只有固定的几个值的时候,可以不写
3、default可以写在最前面吗?如果可以,会发生什么情况?
可以。
(1)default的执行顺序与它在switch中的位置无关。
(2)当default的顺序与break省略同时出现的时候,出来的结果可能不是你想要的。
4、多个case后面的常量值,不能一样
import java.util.Scanner;
public class Cherris2 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数据(1-7)");
int number = sc.nextInt();
switch (number){
default:
System.out.println("输入的数据有误");
// break;
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
}
}
}
利用case的穿透性求月份所在的季节:
import java.util.Scanner;
public class Cherris {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入月份");
int month = sc.nextInt();
switch (month){
case 12:
case 1:
case 2:
System.out.println("winter");
break;
case 3:
case 4:
case 5:
System.out.println("spring");
break;
case 6:
case 7:
case 8:
System.out.println("spring");
break;
case 9:
case 10:
case 11:
System.out.println("spring");
break;
default:
System.out.println("输入的月份数有误!");
break;
}
}
}