当前位置 博文首页 > RtxTitanV的博客:Java基础知识总结之控制流程
流程是指程序运行时,各语句的执行顺序。控制流程就是用来控制程序中各语句执行的顺序。控制流程结构分为顺序结构、选择结构和循环结构三种。
本文主要对Java的控制流程进行简单总结。
块(即复合语句)是指由一对大括号括起来的若干条简单的Java语句。块确定了变量的作用域。一个块可以嵌套在另一个块中。下面就是在main方法块中嵌套另一个语句块的示例:
public static void main(String[] args) {
int n;
...
{
int k;
...
}
}
但是,不能在嵌套的两个块中声明同名变量。
顺序结构是程序中最简单最基本的控制流程结构,就是按照代码的先后顺序,依次执行。顺序结构流程图如下:
代码示例:
public class OrderDemo {
public static void main(String[] args) {
System.out.println("开始");
System.out.println("Hello World");
System.out.println("结束");
}
}
选择结构也被称为分支结构,可根据不同的条件按照不同的选择执行不同的代码。包括if条件语句和switch语句。其中if条件语句有if
、if···else
和if···else if
三种格式。
格式:if(condition) statement
注意:这里的statement可以是一条简单语句也可以是一个块(复合语句)。
if语句控制流程图如下:
执行流程说明:先判断关系表达式的值是true还是false,如果是true则执行语句体,如果是false则不执行语句体。
代码示例:
public class IfDemo {
public static void main(String[] args) {
System.out.println("开始");
int x = 10;
if (x == 10) {
System.out.println("x等于10");
}
if (x == 20) {
System.out.println("x等于20");
}
System.out.println("结束");
}
}
格式:if (condition) statement1 else statement2
if···else语句控制流程图如下:
执行流程说明:先判断关系表达式的值是true还是false,如果是true则执行语句体1,如果是false则执行语句体2。
注意:
- else部分是可选的,else子句与最邻近的if构成一组。
- 三元运算符和if···else语句的情况很相似,在某些情况下应该是可以相互转换。三元运算符的操作都可以使用if语句改进,反之不成立。比如if语句的语句体是一条输出语句的时候,因为三元运算符是一个运算符,必须要求有一个结果返回,而输出语句却不能作为一个返回结果。
代码示例:
public class IfDemo2 {
public static void main(String[] args) {
// 创建键盘录入对象
Scanner sc = new Scanner(System.in);
// 获取两个数据中较大的值
System.out.println("请输入第一个数据:");
int a = sc.nextInt();
System.out.println("请输入第二个数据:");
int b = sc.nextInt();
// 定义一个变量接收最大值
int max;
if (a > b) {
max = a;
} else {
max = b;
}
System.out.println("max:" + max);
System.out.println("----------------");
// 判断一个数据是奇数还是偶数
System.out.println("请输入你要判断的数据:");
int x = sc.nextInt();
if (x % 2 == 0) {
System.out.println(x + "这个数据是偶数");
} else {
System.out.println(x + "这个数据是奇数");
}
}
}
格式:if (condition1) statement1 else if (condition2) statement2···else statement(n+1)
if···else if语句控制流程图如下:
执行流程说明:判断关系表达式1的值是true还是false,如果是true,就执行语句体1,如果是false,就继续判断关系表达式2的值是true还是false,如果是true,就执行语句体2,如果是false,就继续判断关系表达式3的值是true还是false···如果都不满足,就执行语句体n+1。
代码示例:
public class IfDemo3 {
public static void main(String[] args) {
/*
键盘录入一个成绩,判断并输出成绩的等级。等级如下:
90-100 优秀
80-90 好
70-80 良
60-70 及格
0-60 不及格
*/
// 创建键盘录入对象
Scanner sc = new Scanner(System.in);
// 输入数据
System.out.println("请输入考试成绩:");
int score = sc.nextInt();
if (score < 0 || score > 100) {
System.out.println("输入的成绩有误");
} else if (score >= 90 && score <= 100) {
System.out.println("优秀");
} else if (score >= 80 && score < 90) {
System.out.println("好");
} else if (score >= 70 && score < 80) {
System.out.println("良");
} else if (score >= 60 && score < 70) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
}
}
格式:
switch (表达式) {
case 值1:
语句体1
[break;]
...
case 值n:
语句体n
[break;]
default:
语句体 n+1;
[break;]
}
解释:
- swich中表达式的取值:byte、short、int、char、枚举(JDK1.5)、String(JDK1.7)。
- case:后面的值就是要和表达式进行比较的值。
- break:表示程序到这里中断,跳出switch语句。可以省略但最好不要省略。
- default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else。
switch语句控制流程图如下:
执行流程说明:首先计算表达式的值,然后和每一个case进行比较,如果有匹配的就执行对应的语句体,遇到break或执行到switch语句结束处为止。最后,如果没有匹配的,并且有default字句,就执行default的语句体。
注意:
- case子句中的值必须是常量,且所有case子句中的值应该是不同的。
- default可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
- default并不是一定要放在switch语句最后,它可以出现在switch语句任意位置。
- break可以省略,但是不建议,如果在case分支语句的末尾没有break语句,那么就会接着执行下一个case分支语句,这可能会引发错误。
- 当在switch语句中使用枚举常量时,不必在每个case中指明枚举名,可以由switch的表达式值确定。
代码示例:
public class SwitchDemo {
public static void main(String[] args) {
/*
键盘录入一个数字(1-7),输出对应是星期几
*/
// 创建键盘录入对象
Scanner sc = new Scanner(System.in);
// 输入数据
System.out.println("请输入一个数据:");
int week = sc.nextInt();
// switch判断语句
switch (week) {
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;
default:
System.out.println("输入的数据有误");
break;
}
}
}
public class SwitchDemo2 {
public static void main(String[] args) {
/*
根据给定的月份,输出对应的季节
*/
// 创建键盘录入对象
Scanner sc = new Scanner(