任何复杂的业务逻辑都可以由顺序结构、分支结构、循环结构来实现,其中分支结构用于
实现根据条件来选择性地执行某段代码,循环结构则用于实现根据循环条件重复执行某一段代码,JAVA提供了if 和 switch两种分支语句,并提供了while 、do while和for三种循环结构,并在JAVA5之后提供了一种新的循环结构:foreach增强for循环,能以更简单的方式
来遍历集合、数组的元素,JAVA还提供了break 和continue来控制程序的循环结构。
1.顺序结构
-
顺序结构就是程序从上到下逐行执行,中间没有任何判断和跳转。
2.分支结构
-
JAVA提供了两种常见的分支结构:if语句和switch语句,其中if语句使用布尔表达式或布尔值作为分支条件来进行分支控制;而switch语句则用于对多个整型值进行匹配,从而实现分支来控制流程。
public class IfTest {
public static void main(String[] args) {
//声明一个int 类型的变量 score,并为其赋值为61
int score =61;
//当score大于60时,大括号里面的内容才会执行,会输出及格
if(score>60){
System.out.println("score及格");
}
//声明一个Int 类型的变量score1,并为其赋值为59
int score1 =59;
if (score1>60) {
//当score1大于60时,执行下面这行语句
System.out.println("score1及格");
} else {
//否则执行这一行语句
System.out.println("score1不及格");
}
//声明一个Int 类型的变量score2,并为其赋值为71
int score2 = 71;
if (score2>=90) {
//当score2大于90时为优秀
System.out.println("score2优秀");
}else if (score2>=80){
//当score2大于80时为良好
System.out.println("score2良好");
}else if (score2>=70) {
//当score2大于70时为中等
System.out.println("score2中等");
}else if (score2>60) {
//当score2大于60时为及格
System.out.println("score2及格");
}else {
//否则为不及格
System.out.println("score2不及格");
}
/**
* switch 语句由一个控制表达式和多个case标签组成,和if语句不同的是,switch语句
* 后面的控制表达式的数据类型只能是整数类型、枚举和java.lang.String类型
*/
//定义一个int类型的变量score3
char score3 ='B';
switch(score3){
case 'A':
System.out.println("score3优秀");
break;
case 'B':
System.out.println("score3良好");
break;
case 'C':
System.out.println("score3中等");
break;
case 'D':
System.out.println("score3及格");
break;
case 'F':
System.out.println("score3不及格");
break;
default:
System.out.println("score3输入错误!");
}
}
}
3.循环结构
-
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体。当反复执行循环体时,需要在合适的时候把循环条件改为假,从而结束循环,否则循环将一直循环下去,形成一个死循环。循环语句可能包含4个部分。
1.初始化语句(init_statement):一条或多条语句,这些语句用于完成一些初始化工作,初始化语句在循环开始之前执行
2.循环条件(test_expression):这是一个boolean表达式,这个表达式决定是否执行循环体
3.循环体(body_statement):这个部分是循环的主体,如果循环条件允许,这个代码将被重复执行,如果这个代码块只有一行语句,则这个代码块的花括号是可以省略的
4.迭代语句(iteration_statement):这个部分在一次循环体执行结束后,对循环条件求值之前执行,通常用于控制循环条件中的变量,使得循环在合适的时候结束。 -
3.1whlie循环
public class WhileTest {
public static void main(String[] args) {
/*
* while循环语句
*[init_statement]
*while(test_expression){
* statement;
* [iteration_statement]
*}
*while循环每次执行循环体之前,先对test_expression循环条件求值,如果循环条件为true
*则运行循环体部分。从上面的语法格式来看,迭代语句iteration_statement总是位于循环体
*的最后,因此只有当循环体能成功执行完成时,while循环才会执行iteration_statement迭
*代语句
*从这个意义上来看,while循环条件也可被当成条件语句,如果test_expression条件一开始就
*为false,则循环体不执行。
*/
//初始化循环条件并赋值为0
int a=0;
while (a<10) {
// System.out.println(a++);
// 当a=10时,循环结束
a++;
}
System.out.println("while循环结束");
// 下面是一个死循环
// while (a<10) {
// System.out.println("死循环"+a--);
// a--;
// }
}
}
- 3.2 do while 循环
public class DoWhile {
public static void main(String[] args) {
/*
* do while 循环与 while循环的区别在于:while循环是先判断循环条件,如果循环条件为真则执行
* 循环体,否则不行;而do while 循环条件则先执行循环体,然后才判断循环条件,如果循环条件
* 为真,则执行下一次循环,否则终止循环,也就是do while无论是否满足条件都至少会执行一次循环。
* [init_statement]
* do{
* statement;
* [iteration_statement]
* }while(test_expression);
*/
//定义变量a
int a =1;
//执行 do while 循环
do {
System.out.println(a++);
//循环迭代语句
a++;
//循环条件紧跟while关键字后面
} while (a<10);
System.out.println("循环体结束!");
}
}
- 3.3 for循环
public class ForTest {
public static void main(String[] args) {
/*
* for循环是更加简洁的循环语句,大部分情况下,for循环语句可以代替while循环、do while循环。
* for循环的基本格式如下:
* for([init_statement];[test_expression];[iteration_statement]){
* statement
* }
* 程序执行for循环时,先执行循环的初始化语句init_statement,初始化语句只在循环开始前执行一
* 次,每次执行循环体之前,先计算test_expression循环条件的值,如果循环条件返回true,则执行
* 循环体,循环体执行结束后执行循环迭代语句。因此,对于for循环而言,循环条件总比循环体要多执
* 行一次,因为最后一次执行循环条件返回flase,将不再执行循环体。因为for循环的循环迭代语句没
* 有与循环体放在一起,因此即使在执行循环体时遇到continue语句结束本次循环,迭代语句也一样会
* 执行。
*/
//初始化循环条件、循环条件、循环迭代语句
for(int i =0;i<10;i++){
System.out.println(i);
}
System.out.println("循环结束");
//for循环允许同时制定多个初始化语句,循环条件也可以是包含逻辑运算符的表达式
for(int a=0,b=0,c=0;a<10&&b<10&&c<4;c++){
System.out.println(c++);
}
//for循环括号中只有2个分号是必需的,初始化语句、循环条件、迭代语句部分都是可以省略的,如果省略
//循环条件,则这个循环条件默认为true,将会产生一个死循环
// for(;;){
// System.out.println("死循环!");
// }
//嵌套循环 99乘法表
//假设外层循环次数为N,内层循环次数为M,那么内层循环的循环体实际上需要执行N*M次
for(int j=1;j<10;j++){
for(int k=1;k<=j;k++){
System.out.print(j+"x"+k+"="+j*k+" ");
}
//换行
System.out.println();
}
/*
* 使用break结束循环
* 某些时候需要在某种条件出现时强行终止循环,而不是等到循环条件为false时才退出循环,此时
* 可以用break来完成这个功能.break用于完全结束一个循环,跳出循环体。不管是哪种循环,一旦
* 执行了break,系统将完全结束该循环,开始执行循环之外的代码
*/
for(int s=0;s<10;s++){
System.out.println(s);
if(s==5){
//执行break时结束循环
break;//如果使用的是return则结束的是整个方法
}
}
/*
* foreach循环
* JAVA5以后,JAVA提供了一种更简单的循环:foreach循环,这种循环遍历数组和集合更加简洁
* 使用foreach循环遍历数组和集合元素时,无须获得数组和集合的长度,无须根据索引访问数组
* 元素和集合元素,foreach循环会自动遍历数组和集合的每个元素。
* 在下面语法格式中,type是元素类型,variableName是一个形参名,foreach循环将自动将数组
* 元素、集合元素依次赋给该变量
* for(type variableName : array | collection){
* //variableName 自动迭代访问每个元素
* }
*/
//定义一个String 类型的数组,初始化 并赋值
String [] s={"v","g","h","l"};
//使用foreach循环来遍历数组元素
//其中ss将会自动迭代每一个数组元素
for(String ss:s){
System.out.println(ss);
}
}
}