1.流程控制语句
流程控语句简单的说就是用来控制整个程序中各个语句执行顺序以及方向的语句,使得各个语句的执行更加的条理化,从而把语句组合成能完成一定功能的小逻辑模块。
2.分类
(1)顺序结构:程序自上而下依次执行,中间没有特定的语法结构,是程序结构中最简单的流程控制。
代码示例:
package com.dlj.test;
//今天是周二,100天以后是周几?
public class WeekTest {
public static void main(String[] args) {
int week = 2;
week = week + 100;
week = week % 7;
System.out.println("100天以后是周" + week);//100天以后是周4
}
}
(2)分支结构:根据条件,选择性地执行某段代码。
- if—else结构
格式①:
if(条件表达式){
执行表达式
}
*********************
格式②:
if(条件表达式){//二选一
执行表达式1
}else{
执行表达式2
*********************
格式③:
if(条件表达式){//多选一
执行表达式1
}else if(条件表达式){
执行表达式2
}
...
else{
执行表达式n
}
代码示例:
package com.dlj.test;
//在键盘上任意输入三个整数,进行排序
import java.util.Scanner;
public class SortTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int num1 = scan.nextInt();
System.out.println("请输入第二个整数:");
int num2 = scan.nextInt();
System.out.println("请输入第三个整数:");
int num3 = scan.nextInt();
if (num1 >= num2) {
if (num3 >= num1)
System.out.println(num2 + "," + num1 + "," + num3);
else if (num3 <= num2)
System.out.println(num3 + "," + num2 + "," + num1);
else
System.out.println(num2 + "," + num3 + "," + num1);
} else {
if (num3 >= num2)
System.out.println(num1 + "," + num2 + "," + num3);
else if (num3 <= num1)
System.out.println(num3 + "," + num1 + "," + num2);
else
System.out.println(num1 + "," + num3 + "," + num2);
}
}
}
注:
①条件表达式必须是布尔型。
②当多选一的时候,最后面的else结构是可选的。
③if-else结构可以嵌套使用。
④如果if-else下的语句只有一行,{ }可省。
⑤如果有多个else if 结构,并且它们之间是互斥的,则else if的先后顺序不作特定要求;反之,则需根据实际情况确定其位置。
- switch—case结构
switch(表达式){
case 常量1:
执行语句1;
break;
case 常量2:
执行语句2;
break;
...
default:(类似于if-else中的else)
执行语句n;
break;
}
代码示例:
package com.dlj.test;
//从键盘中输入成绩,90分以上为“A”,70到90为“B”,60到70为“C”,否则为“D”
import java.util.Scanner;
public class SwitchCaseExer1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入你的成绩:(0-100)");
int score = scan.nextInt();
score = score / 10;
switch (score) {
case 10:
case 9:
System.out.println("等级:A");
break;
case 8:
case 7:
System.out.println("等级:B");
break;
case 6:
System.out.println("等级:C");
break;
default:
System.out.println("等级:D");
break;
}
}
}
package com.dlj.test;
//从键盘中输入某一年的某个月的第某天,计算出这一天是当年的第几天
import java.util.Scanner;
public class SwitchCaseExer {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入year:");
int year = scan.nextInt();
System.out.println("请输入month:");
int month = scan.nextInt();
System.out.println("请输入day:");
int day = scan.nextInt();
int sumDays = 0;
switch (month) {
case 12:
sumDays += 30;
case 11:
sumDays += 31;
case 10:
sumDays += 30;
case 9:
sumDays += 31;
case 8:
sumDays += 31;
case 7:
sumDays += 30;
case 6:
sumDays += 31;
case 5:
sumDays += 30;
case 4:
sumDays += 31;
case 3:
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
sumDays += 29;
} else {
sumDays += 28;
}
case 2:
sumDays += 31;
case 1:
sumDays += day;
break;
}
System.out.println(year+"年" + month + "月" + day + "日,是当年的第" + sumDays + "天。");
}
}
注:
①根据switch—case表达式中的值,依次匹配各个case中的常量,且case只能声明常量,不能声明范围。
②break关键字用在该结构中是可选的,表示一旦执行到此关键字,就跳出switch—case结构,否则一直执行到结构末尾结束为止。
③switch结构中的表达式只能是如下几种数据类型之一:byte、short、char、int、枚举(JDK5.0之后新增)、String(JDK7.0后新增)
④default相当于if—else结构中的else,,是可选的且位置灵活。
⑤执行语句相同的case可以合并,共用一个执行语句。
关于三元运算符,if—else,switch—case三者的说明:
(1)凡是可以使用三元运算符和switch—case的都可以转换成if—else,反之则不成立。
(2)当三者均可以同时使用时,优先选择三元运算符后和switch—case,简单且执行效率高。
(3)循环结构:在某些条件下,反复执行特定代码。
-
四要素:
①初始化
②循环条件(boolean类型)
③循环体
④迭代部分 -
for结构
for(①初始化;②循环条件;④迭代部分){
③循环体
}
执行过程:① - ② - ③ - ④ - ② - ③ - ④ - ... - ②
代码示例:
package com.dlj.test;
//输出100以内所有7的倍数,并计算个数和所有倍数的和
public class ForExer1 {
public static void main(String[] args) {
int sum = 0;
int count = 0;
for (int i = 1; i <= 100; i++) {
if (i % 7 == 0) {
System.out.println(i);
sum += i;
count++;
}
}
System.out.println("个数为:" + count);
System.out.println("和为:" + sum);
}
}
注:
①初始化条件部分,可以同时定义多个变量中间用逗号隔开,但变量的类型必须一致,且定义的变量只在这个循环内有效;同样的迭代部分也可以有多个变量更新。
②循环条件部分为boolean类型表达式,当结果为false时推出循环。
- while结构
①初始化
while(②循环条件){
③循环体;
④迭代部分;
}
执行过程:① - ② - ③ - ④ - ② - ③ - ④ - ... - ②
代码示例:
package com.dlj.test;
//遍历100以内能够同时被2和3整除的正整数
public class WhileTest {
public static void main(String[] args) {
int i = 1;
while (i <= 100) {
if (i % 2 == 0 && i % 3==0) {
System.out.println(i);
}
i++;
}
}
}
注:迭代部分不能丢,一旦丢了,可能导致程序死循环
- do while结构
①初始化
do{
③循环体;
④迭代部分;
}while(②循环条件);
执行过程:① - ③ - ④ - ② - ③ - ④ - ... - ②
代码示例:
package com.dlj.test;
//遍历100以内的偶数
public class DoWhileTest {
public static void main(String[] args) {
int i = 1;
do {
if (i % 2 == 0) {
System.out.println(i);
}
i++;
} while (i <= 100);
}
}
注:do-while循环至少会执行一次循环体。
关于 for、while、 do while三者的说明:
(1)开发中大多使用for和while
(2)三者可以相互转换
(3)for和while循环的初始化条件部分的作用范围不一样
-
不在循环部分限制次数的结构:for(; ;)或while(true)
-
结束循环的方式:
①循环条件部分返回false
②在循环体中执行break -
嵌套循环:指循环结构里面还有循环结构
① 内层循环结构遍历一遍,只相当于外层循环循环体执行了一次
② 假设外层循环需要执行m次,内层循环需要执行n次。此时内层循环的循环体一共执行了m * n次
③ 外层循环控制行数,内层循环控制列数 -
break和continue的比较
① break:结束当前循环;不仅用在循环结构中,还用于switch—case中。
②continue:结束当次循环;只能用于循环结构中
③break label:结束指定标识的一层循环结构;continue lable:结束指定标识的一层循环结构当次循环
④二者关键字后面都不能声明执行语句
package com.dlj.test;
//输出100以内的质数
public class PrimeNumTest {
public static void main(String[] args) {
lable:for (int i = 2; i <= 100; i++) {
//boolean temp = true;
for (int j = 2; j < i; j++) {
if (i % j == 0) {
//temp = false;
continue lable;//结束指定标识的一层循环结构当次循环
}
}
//if (temp == true) {
System.out.println(i);
}
}
}
//}