JAVA--流程控制语句
Java 的流程控制语句分为三类:选择语句、循环语句和跳转语句。这些语句决定了程序执行的顺序,从而实现不同的逻辑分支、重复执行操作以及控制程序流。
一.选择语句
条件语句(也称为选择语句)是编程语言中用于控制程序执行流程的基本结构之一。它允许程序根据某个条件的真假来决定执行哪一部分代码。在程序执行过程中,条件语句通过判断一个或多个表达式的值来决定程序的分支走向。
选择语句分为:① if 条件语句 ② switch 条件语句
1.if条件语句
if条件语句用于根据条件执行不同的代码块。如果条件为真,则执行if块中的代码;否则,执行else块中的代码,if条件语句有多种形式:
基本语法:
// 第一种:
if (条件表达式) {
执行的语句;
}
// 第二种:
if (条件表达式) {
表达式的值为真时执行的语句;
} else {
表达式的值为假时执行的语句;
}
// 第三种:
if (条件表达式1) {
表达式1的值为真时执行的语句;
} else if (条件表达式2) {
表达式2的值为真时执行的语句;
} else {
其他条件时要执行的语句;
}
①只有一个条件语句时,根据条件来判断是否执行代码块。
public static void main(String[] args) {String num = "15212341234"; // 创建String类型变量,保存电话号码if (num != "12345678910") // 如果电话号码不是12345678910{System.out.println("您拨打的电话是空号!"); // 提示您拨打的电话是空号}
②有两个条件语句时,根据条件执行不同的代码块。如果条件为真,则执行if块中的代码;否则,执行else块中的代码。
public static void main(String[] args) {String num = "15212341234"; // 创建String类型变量,保存电话号码if (num != "12345678910") // 如果电话号码不是12345678910{System.out.println("您拨打的电话是空号!"); // 提示您拨打的电话是空号} else {System.out.println("您拨打的电话已接通!");}}
③有多个条件语句时,要检查多个条件。如果第一个条件为假,则检查下一个条件,依此类推。
public static void main(String[] args) {int score = 85; // 假设学生的分数为85if (score >= 90) {System.out.println("您的成绩为A");} else if (score >= 80) {System.out.println("您的成绩为B");} else if (score >= 70) {System.out.println("您的成绩为C");} else {System.out.println("您的成绩为D");}}
2.switch语句
用于根据不同的条件执行不同的代码块。它可以用于替代多个if语句,使代码更加简洁和易于理解。
基本语法:
switch (expression) {
case constant_1:
// 执行语句 1
break;
case constant_2:
// 执行语句 2
break;
// ...
default:
// 执行默认语句 }
public static void main(String args[]) {int day = 3;switch (day) {case 1:System.out.println("Monday");break;case 2:System.out.println("Tuesday");break;case 3:System.out.println("Wednesday");break;default:System.out.println("Invalid day");break;}}
使用规则:
表达式类型限制:switch 语句中的表达式只能是整数类型(如 int,char,short 等),不能是浮点数类型(如 float,double)。
case 值必须唯一:每个 case 后面的值必须是一个常量表达式,且不能重复。
default 可选: defult 分支是可选的,用于处理所有 case 都不匹配的情况。通常建议将其放在最后。
break 的作用:braek 语句用于跳出 switch 结构。如果没有 break,程序将继续执行下一个 case 或 defult 的代码,这种现象称为“贯穿”,所以在 case 语句块中break不可省略;default 语句块中的 break 语句可以省略。
if语句和switch语句的区别:
1.条件表达式的类型不同:
if
语句可以处理任意类型的布尔表达式,只要表达式的结果可以转换为布尔值(非零为真,零为假),而 switch
语句的控制表达式只能是整数类型(如 int
、char
、short
等),不能是浮点数类型(如 float
、double
)。
2.匹配方式不同:
if
语句通过条件判断逐条执行,适合处理范围判断或复杂逻辑;而 switch
语句通过值匹配执行对应分支,适合处理多个固定值的判断。例如,判断一个变量是否在某个范围内更适合用 if
,而判断一个变量是否等于几个固定值之一则更适合用 switch。
3.执行效率不同:
在底层实现上,switch
通常比 if-else if
链更高效。编译器会对 switch
语句进行优化,生成跳转表(jump table),使得程序可以立即跳转到匹配的 case
分支,而不需要逐条判断条件。相比之下,if-else if
链是顺序判断的,如果匹配的条件靠后,效率会较低。
4.可读性与维护性:
switch
语句在处理多个固定值分支时结构更清晰,代码更简洁,可读性更高。而 if-else if
链在分支较多时容易变得冗长且难以维护。例如,判断一个数字是否是工作日或周末时,使用 switch
可以更直观地表达逻辑。
二.循环语句
当我们需要重复去做某些事(功能)时,就可以考虑使用循环来实现。在 Java中循环有以下几种:① for循环 ② while循环 ③ do..while循环
1.for循环
for
循环适用于已知循环次数的情况,通常包含三个表达式:初始化表达式、条件表达式和更新表达式。初始化表达式用于变量的初始化,条件表达式决定是否继续执行循环体,更新表达式则在每次循环结束后执行。
格式:
for(循环变量类型 循环变量 = 初值; 循环条件; 循环变量步长){
循环体;
}
public class ForLoopExample {public static void main(String[] args) {for (int i = 1; i <= 5; i++) {System.out.println("当前i的值为:" + i);}}
}
for循环变式:
①如果事先对循环变量进行声明或在循环体中声明循环变量步长,则格式可以做出相对应的改变
public static void main(String[] args) {int sum = 0;int i = 0;for (; i <= 100; ) {i = i + 1;num = num + i;}System.out.println(num);}
②死循环
public static void main(String[] args) {for (;;) {System.out.println("hello world");}}
2.while循环
while
循环在每次循环开始前检查条件表达式,如果条件为真(true),则执行循环体;否则跳过循环。这意味着如果初始条件为假,循环体将不会执行。
格式:
循环变量初值;
while(循环条件) {
要执行的逻辑;
循环变量步长;
}
与 for
循环不同,while
循环适用于循环次数未知的场景,只要条件为真,循环就会继续执行。
public class WhileLoopExample {public static void main(String[] args) {int i = 0;while (i < 5) {System.out.println(i);i++;}}
}
3.do...while循环
do...while
循环与 while
类似,但其关键区别在于:do...while
会先执行一次循环体内的代码,然后再检查条件是否为真。即使条件一开始就不满足,循环体也会至少执行一次。
格式:
循环变量初值;
do {
循环处理逻辑;
循环变量步长;
} while (循环条件);
public class DoWhileLoopExample {public static void main(String[] args) {int i = 0;do {System.out.println(i);i++;} while (i < 5);}
}
三个循环的适用场景:
大多数情况下这三个循环都可以通用
for
循环:适合已知循环次数的场景,如遍历数组或集合。
while
循环:适合不确定需要执行多少次的场景,依赖外部条件变化来决定是否继续执行。do...while
循环:适合至少需要执行一次循环体的场景,确保循环体至少执行一次后再进行条件判断
循环嵌套:
循环嵌套是 Java 中的一种常见结构,指的是在一个循环体内包含另一个循环。
在嵌套循环中,外层循环控制整体的迭代次数,而内层循环则负责在每次外层循环迭代中完成更细粒度的操作。
eg:以for循环为例
格式:
for (循环变量类型 循环变量 = 初值; 循环条件; 循环变量步长) {
for (循环变量类型 循环变量 = 初值; 循环条件; 循环变量步长) {
循环体;
}
}
for (int i = 1; i <= 9; i++) {for (int j = 1; j <= i; j++) {System.out.print(j + "×" + i + "=" + (i * j) + "\t");}System.out.println(); // 每行结束后换行
}
int rows = 7;
for (int i = 1; i <= rows; i++) {for (int j = 1; j <= i; j++) {System.out.print("* ");}System.out.println();
}
循环迭代法
循环迭代法在Java中是一种基础而广泛使用的编程技术,用于重复执行一段代码块直到满足特定条件。根据具体需求,开发者可以选择for
、while
或do...while
循环结构。
eg:
①求和
int sum = 0;for (int i = 1; i <= 100; i++) {sum = sum + i;}System.out.println(sum);
②阶乘
Scanner scanner = new Scanner(System.in);System.out.print("请输入一个整数n:");int n = Integer.parseInt(scanner.nextLine());int sum = 1;for (int i = 1; i <= n; i++) {sum = sum * i;}System.out.println(n + "!=" + sum)
③计算能被3,5整除的100之内的整数和
int sum = 0;for(int i=1;i<=100;i++){if(i%3==0 ||i%5==0) {sum += i;}}System.out.println(sum);
④今天是一年中的第几天
Calendar c = Calendar.getInstance();
int day = c.get(Calendar.DAY_OF_MONTH);
int month = c.get(Calendar.MONTH)+1;
int year = c.get(Calendar.YEAR);
int sum = 0;
System.out.println(year+"-"+month+"-"+day);
for (int m = 1; m < month; m++) { //m表示月switch (m) {case 1:case 3:case 5:case 7:case 8:case 10:sum+=31;break;case 4:case 6:case 9:case 11:sum+=30;break;case 2:sum+=28;break;}}//计算天
sum+=day;//判断闰年
// 如果是闰年,大于2月+1天
boolean f = (year%400==0)||( year%4==0 && year%100!=0);if(f && month>2){sum+=1;}System.out.println("总天数:"+sum);
三.跳转语句
Java 中的跳转语句用于控制程序的执行流程,允许开发者在特定条件下跳出循环、结束当前迭代或直接退出方法。常见的跳转语句有:① break ② continue ③ return
1.break
break 语句用于立即终止当前所在的循环或 switch 语句。当 break 被执行时,程序将跳转到循环或 switch 之后的下一条语句继续执行。
int day = 3;
switch (day) {case 1:System.out.println("Monday");break;case 2:System.out.println("Tuesday");break;case 3:System.out.println("Wednesday");break;default:System.out.println("Invalid day");
}
2.continue
continue 语句用于跳过当前循环体中剩余的代码,直接进入下一次循环的判断。它适用于在满足特定条件时跳过某些不必要的操作,但仍然希望继续执行后续的循环迭代。
for (int i = 0; i < 5; i++) {if (i == 2) {continue; // 当i等于2时跳过本次循环}System.out.println(i);
}
3. return
return 语句用于从当前方法中返回。它可以携带一个值(返回值)或者不携带任何值(返回类型为 void 的方法)。该语句通常用于提前结束方法的执行,尤其在满足特定条件时返回计算结果或终止程序流程。
public int findIndex(int[] arr, int target) {for (int i = 0; i < arr.length; i++) {if (arr[i] == target) {return i; // 找到目标值后立即返回索引}}return -1; // 未找到目标值
}