在Java中,程序的逻辑控制分为三种:顺序结构、分支结构、循环结构
一、顺序结构
相对于分支结构和循环结构,顺序结构是最简单的一个。顾名思义,顺序结构,就是按照程序的书写顺序运行。
例:如该程序所示,输出的结果是按照程序的顺序输出的,这就是顺序结构的最大的特点
public class SequentialStructure {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 30;
//输出结果是10、20、30
System.out.println(a);
System.out.println(b);
System.out.println(c);
//输出结果是30、10、20
System.out.println(c);
System.out.println(a);
System.out.println(b);
}
}
二、分支结构
分支结构分为两种:if语句和switch语句
1.if语句
if语句有三种格式;
①当布尔表达式为true时,执行if内的代码,如果为false时,跳过if语句,继续执行程序
//格式
if(布尔表达式){
//语句
}
//举例
int score = 50;
if(score > 60){
System.out.println("成绩合格");
}
System.out.println("成绩不合格");
②当布尔表达式为true时执行语句1,否则执行语句2
//格式
if(布尔表达式){
//语句1
}else{
//语句2
}
//举例
int age = 20;
if(age >= 18){
System.out.println("已成年");
}else{
System.out.println("还是未成年");
}
③当布尔表达式1成立时,执行语句1,否则判断布尔表达式2是否成立,若成立,则执行语句2,若不成立,则执行语句3
//格式
if(布尔表达式1){
//语句1
}else if(布尔表达式2){
//语句2
}else{
//语句3
}
//举例
int num = -9;
if(num == 0){
System.out.println("该数为 0");
}else if(num > 0){
System.out.println("该数为正数");
}else{
System.out.println("该数为负数");
}
注①:在写if语句时,切忌在if(布尔表达式)后边加;,如果加了分号,那么if后的代码块就和if没有 任何关系,所以程序也不会向着你想的方向执行。
就如以下例子所示,多了一个分号,那么在代码执行的时候就不会认为存在if分支语句,所以该程序的输出为:“成绩合格”、“成绩不合格”,本应该输出其中一个但是因为多出了一个“;”,就全部被输出了。
int score = 50;
if(score > 60);{
System.out.println("成绩合格");
}
System.out.println("成绩不合格");
注②:在写if分支语句的时候,要注意悬挂else的情况,在写if/else语句时,可以不加“{}”,但是只 能写一条语句,并且else会和最近的if进行匹配,所以一般不建议这样写if分支语句。
2.switch语句
格式:
switch(表达式){
case 常量1:
//语句1
break;
case 常量2:
//语句2
break;
……
default:
//语句n
break;
}
执行程序时,先计算表达式的值,与case依次进行比较,当有相等的情况时,就返回对于case下的语句,如果走到最后都没有与表达式匹配的case,则返回default下的语句。
注①:在每一个case后都需要有break来跳出该结构,不然就会输出所有的结果。
注②:switch的括号的表达式只能是:基本类型:byte、char、short、int,其他的类型都不可以
引用类型:String常量串、枚举类型
注③:switch的局限性比较大,switch括号中的表达式不能是复杂的表达式;switch也支持嵌套。
例子:
//switch语句举例1:表达式为基本类型int
//输出结果为:星期六
int day = 6;
switch(day){
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;
}
//switch语句举例2:表达式为引用类型String
//输出结果为:你好
String a = "你好";
switch(a){
case "你好":
System.out.println("你好");
break;
case "早上好":
System.out.println("早上好");
break;
case "晚上好":
System.out.println("晚上好");
break;
case "晚安":
System.out.println("晚安");
break;
default:
System.out.println("哈哈哈");
break;
}
三、循环结构
循环语句分为三种:for循环语句、while循环语句、do while循环语句
在写循环结构的时候,千万不能多加”;“
1.for循环语句
格式:
for(表达式①;布尔表达式②;表达式③){
//语句
}
表达式①式用于初始化循环变量;布尔表达式②是循环的终止条件,循环到不满足布尔表达书②时循环结束;表达式③是循环变量的更新方式
举例:
//打印1-10的数字
for(int i = 1;i <= 10;i++){
System.out.println(i);
}
注①:for循环语句也可以不写“{}”,但是不写的话在for循环下只能写一条语句
2.while循环语句
格式:
while(循环条件){
//语句
}
循环条件为true是,进入循环体,执行内部语句,否则结束循环。
与for循环不同的是while循环对循环变量的初始化需要在循环之前进行。
举例:
//打印1-10的数字
int i = 0;
while(i <= 10){
System.out.println(i);
i++;
}
for循环和while循环往往可以相互转换。
3.do while循环语句
格式:
do{
//语句
}while(循环条件);
循环条件为true时进行循环,但是与for循环和while循环不同的是,do while循环总会执行至少一次循环体中的语句,不管满足循环条件与否。
注①:在最后要加“;”,否则会出错,这也是do while循环和for循环、while循环的不同之处。
举例:
//do while 循环
int n = 1;
do{
System.out.println(n);
n++;
}while(n <= 10);
4.break 和 continue
在循环结构中,break 和 continue 很重要。break 的功能是跳出所有循环,让循环提前结束;continue 的功能是跳出本次循环,进行下一次的循环。
具体的区别:
//输出结果为 1
// 2
//从3之后(包括3)就不再输出
for(int a = 1; a <= 5;a++){
if(a == 3){
break;
}
System.out.println(a);
}
//输出结果为 1
// 2
// 4
// 5
//只不输出3
for (int b = 1;b <= 5;b++){
if(b == 3){
continue;
}
System.out.println(b);
}