流程是指程序运行时,各语句的执行顺序。控制流程就是用来控制程序中各语句执行的顺序。控制流程结构分为顺序结构、选择结构和循环结构三种。本文主要对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
三种格式。
1.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 ( "结束" ) ; } }
2.if···else语句 格式:if (condition) statement1 else statement2
if···else语句控制流程图如下: 执行流程说明:先判断关系表达式的值是true还是false,如果是true则执行语句体1,如果是false则执行语句体2。
注意:
代码示例:
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 + "这个数据是奇数" ) ; } } }
3.if···else if语句 格式: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) { 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 ( "不及格" ) ; } } }
4.switch语句 格式:
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) { Scanner sc = new Scanner ( System. in) ; System. out. println ( "请输入一个数据:" ) ; int week = sc. nextInt ( ) ; 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 ( 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 ( "输入的月份有误" ) ; } } }
if语句和switch语句各自的使用场景:
if语句的使用场景:针对boolean类型的判断 针对一个区间的判断 针对几个常量的判断 switch语句的使用场景: 四、循环结构 循环语句就是在满足一定条件的情况下反复执行某一个操作。包括while循环语句、do···while循环语句和for循环语句。
1.while语句 基本格式:
while ( 判断条件语句) { 循环体语句; }
扩展格式:
初始化语句; while ( 判断条件语句) { 循环体语句; 控制条件语句; }
while语句语句控制流程图如下: 执行流程说明:while语句的循环方式为利用一个条件来控制是否要继续反复执行这个语句。
代码示例:
public class WhileDemo { public static void main ( String[ ] args) { int sum = 0 ; int x = 1 ; while ( x <= 100 ) { sum += x; x++ ; } System. out. println ( "sum:" + sum) ; } }
2.do···while语句 基本格式:
do { 循环体语句; } while ( 判断条件语句) ;
扩展格式:
do { 循环体语句; 控制条件语句; } while ( 判断条件语句) ;
do···while语句语句控制流程图如下: 执行流程说明:首先执行初始化语句,然后执行循环体语句,然后执行控制条件语句,然后执行判断条件语句看结果是true还是false,如果是true,回到循环体语句继续循环,如果是false,就结束循环。
代码示例:
public class DoWhileDemo { public static void main ( String[ ] args) { int sum = 0 ; int x = 1 ; do { sum += x; x++ ; } while ( x <= 100 ) ; System. out. println ( "sum:" + sum) ; } }
3.for语句 格式:
for ( 初始化语句; 判断条件语句; 控制条件语句) { 循环体语句; }
for语句语句控制流程图如下: 执行流程说明:首先执行初始化语句,然后执行判断条件语句,如果结果是true,就继续循环,如果结果是false,循环结束,继续执行循环体语句之后会执行控制条件语句,然后回到判断条件语句进行判断。
注意:
当在for语句的初始化语句(第一部分)中声明了一个变量之后,这个变量的作用域就为for循环的整个循环体。 如果在for语句内部声明一个变量,这个变量就不能在循环体之外使用。如果想要在for循环体之外使用控制条件变量的最终值,就要确保这个变量在循环语句的前面且在外部声明。 可以在各自独立的不同for循环中定义同名的变量。 for循环语句只不过是while循环的一种简化形式,while循环可以和for循环可以等价转换。 代码示例:
public class ForDemo { public static void main ( String[ ] args) { int jc = 1 ; for ( int x = 2 ; x <= 5 ; x++ ) { jc *= x; } System. out. println ( "5的阶乘是:" + jc) ; System. out. println ( "------------" ) ; int jc2 = 1 ; int y = 2 ; while ( y <= 5 ) { jc2 *= y; y++ ; } System. out. println ( "5的阶乘是:" + jc2) ; } }
三种循环语句的区别:
for语句的控制条件变量在循环结束后不能再使用,而while的则可以继续使用。 for适合针对一个范围的判断进行操作,while适合判断次数不明确的操作。 do…while循环至少执行一次循环体,for和while必须先判断条件是否为true,然后才能决定是否执行循环体,也就是循环体中代码可能不会执行。 4.foreach语句 foreach语句是Java5后新增的for语句的特殊简化版本,并不能完全替代for语句,但所有foreach语句都可以改写为for语句。foreach语句可以很方便的遍历数组和集合。格式如下:
for ( 元素的数据类型 变量名 : 数组或者Collection集合对象) { 循环体语句; }
执行流程说明:和for循环类似。
注意:
foreach循环语句的循环变量将会遍历数组或集合中的每个元素,而不需要使用下标值。 在很多场合下,还是需要使用传统的for循环。例如,如果不希望遍历集合中的每个元素,或者在循环内部需要使用下标值等。 代码示例:
public class ForeachDemo { public static void main ( String args[ ] ) { int [ ] numbers = { 1 , 2 , 3 , 4 , 5 } ; for ( int x : numbers) { System. out. print ( x) ; } } }
五、跳转语句 Java语言中提供了3种跳转语句,分别是break语句、continue语句和return语句。
1.break语句 break语句用在switch语句和循环语句中,在switch语句中,break用于退出switch语句,在循环语句中,break(不带标签)作用为跳出单层循环,带标签的break语句可以跳出多层循环。带标签的break语句的标签必须放在希望跳出的最外层循环之前,并且必须紧跟一个冒号。
注意:
事实上,可以将标签应用到任何语句中,甚至可以应用到if语句或者块语句中。 带标签的跳转只能跳出语句块,不能跳入语句块。 代码示例:
public class BreakDemo { public static void main ( String[ ] args) { for ( int x = 0 ; x < 10 ; x++ ) { if ( x == 3 ) { break ; } System. out. println ( "HelloWorld" ) ; } System. out. println ( "over" ) ; System. out. println ( "-------------" ) ; wc: for ( int x = 0 ; x < 3 ; x++ ) { nc: for ( int y = 0 ; y < 4 ; y++ ) { if ( y == 2 ) { break wc; } System. out. print ( "*" ) ; } System. out. println ( ) ; } } }
2.continue语句 continue语句只能用于循环语句中,用于将控制转移到最内层循环的首部,即结束一次循环,继续下一次的循环。还有一种带标签的continue语句,将跳转到与标签匹配的循环首部。代码示例:
public class ContinueDemo { public static void main ( String[ ] args) { for ( int x = 0 ; x < 10 ; x++ ) { if ( x == 3 ) { continue ; } System. out. println ( x) ; } } }
3.return语句 return即方法返回,主要用于结束一个方法,并把控制权交给调用它的语句。代码示例:
public class ReturnDemo { public static void main ( String[ ] args) { getName ( ) ; } public String getName ( ) { return "ZhangSan" ; } }