前两篇已经了解了 Java 语言基础,本篇开始 Java 的流程控制.流程控制对任何一门编程语言都是至关重要的,它提供了控制程序步骤的基本手段.
一,复合语句
Java 语言的复合语句是以整个块区为单位的语句,又称块语句.复合语句由 "{"开始,"}" 结束.
对于复合语句,我们只需要知道,复合语句为局部变量创建了一个作用域,该作用域为程序的一部分,在该作用域中某个变量被创建并能够被使用,如果在某个变量的作用域外使用该变量,则会发生错误.并且复合语句中可以嵌套复合语句.
二,条件语句
条件语句可根据不同的条件执行不同的语句.包括 if 条件语句与 switch 多分支语句.这是学习 Java 的一个基础与重点.
1. if 条件语句
使用 if 条件语句,可选择是否要执行紧跟在条件之后的那个语句.关键字 if 之后是作为条件的 "布尔表达式",如果该表达式返回 true,则执行其后的语句;若为 false,则不执行 if 后的语句.可分为简单的 if 条件语句,if···else 语句和 if···else if 多分支语句.
int a = 100;
if(a == 100) {
System.out.println(a);
}
如上方代码,{}之间为复合语句,if 为条件语句,翻译过来就是如果 a 等于 100,则输出 a 的值,否则不执行.
如果 if 后只有一条语句,比如上述代码只有一条输出,可以不加{},但为了代码的可读性,以及防止代码过多出现不必要的错误,建议所有的 if,else 后都加上相应的{}.
2. if···else 语句
if···else 语句是条件语句中最常用的一种形式,它会针对某种条件有选择的作出处理.通常表现为 "如果满足某种条件,就进行某种处理,否则就进行另一种处理".
if 后的 () 内的表达式必须是 boolean 型的.如果为 true,则执行 if 后的复合语句;如果为 false,则执行 else 后的复合语句.
如:
public class Getifelse {
public static void main(String[] args) {
int math = 80; // 声明,数学成绩为80(及格)
int english = 50; // 声明,英语成绩为50(不及格)
if(math >= 60) { // if判断语句判断math是否大于等于60
System.out.println("math has passed");
} else { // if条件不成立
System.out.println("math has not passed");
}
if(english >= 60) { // if判断语句判断english是否大于等于60
System.out.println("english has passed");
} else { // if条件不成立
System.out.println("english has not passed");
}
}
}
运行结果为:
3. if···else if 多分支语句
if···else if 多分支语句用于针对某一事件的多种情况进行处理.通常表现为 "如果满足某种条件",就进行某种处理,否则,如果满足另一种条件,则进行另一种处理.
如:
public class GetTerm {
public static void main(String[] args) {
int x = 40;
if(x > 60) {
System.out.println("x的值大于60");
} else if (x > 30) {
System.out.println("x的值大于30但小于60");
} else if (x > 0) {
System.out.println("x的值大于0但小于30");
} else {
System.out.println("x的值小于等于0");
}
}
}
在本例中,由于 x 为 40,条件 x>60 为 false,程序向下执行判断;条件 x>30 为真,所以执行条件 x>30 后的程序块中的语句.输出结果如下:
所以,if 语句只执行条件为真的语句,其它语句都不会执行.
4. switch 多分支语句
switch 语句是一种比较简单明了的多选一的选择,在 Java 语言中,可以用 switch 语句将动作组织起来进行多选一.语法格式如下:
switch(表达式)
{
case 常量值1:
语句块1
[break;]
...
case 常量值n:
语句块2
[break;]
default:
语句块 n+1;
[break;]
}
switch 语句中表达式的值必须是整型或字符型,常量值 1~n 必须也是整型或字符型.
简单说一下 switch 语句是怎么执行的(重点,初学的朋友要注意).首先 switch 语句先计算表达式的值,如果表达式的值与 case 后的常量值相同,则执行该 case 后的若干个语句,直到遇到 break 语句为止.如果没有 break,则继续执行下一 case 中的若干语句,直到遇到 break 为止.若没有一个常量的值与表达式的值相同,则执行 default 后面的语句.default 语句可选,如果不存在 default 语句,而且 switch 语句中的表达式的值与任何 case 的常量值都不相同,则 switch 不做任何处理.并且,同一个 switch 语句,case 的常量值必须互不相同.
例:用 switch 语句打印出星期的英文单词
import java.util.Scanner;
public class GetSwitch {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("请输入今天星期几:");
int week = scan.nextInt();
switch (week) {
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
case 3:
System.out.println("Wednesday");
break;
case 4:
System.out.println("Thursday");
break;
case 5:
System.out.println("Friday");
break;
case 6:
System.out.println("Saturday");
break;
case 7:
System.out.println("Sunday");
break;
default:
System.out.println("Sorry,I don't konw");
break;
}
}
}
这里 Scanner 是一个扫描器,用来输入的,使用时需在 package 下面用 import 语句导入 Scanner 类,我们可以在控制台中输入一个数字,然后用 nextInt() 来接收,这样 week 的值就是我们输入的数字,接下来执行 switch 语句,有 7 个 case 分别对应周一到周末,default 在输入 1~7 以外的数据时执行.假设在控制台中输入 1,则控制台会执行 case 1 后的语句,输出了 Monday,结果如下:
要注意的是 case 后的常量表达式的值可以为整数和字符,但不可以是实数后字符串,比如 case 1.1,case "ok" 都是非法的.
三,循环语句
循环语句就是在满足一定条件的情况下反复执行某一个操作.包括 while 循环语句,do···while 循环语句和 for 循环语句.
1. while 循环语句
while 循环语句的循环方式为利用一个条件来控制是否要继续反复执行这个语句.
假设现在有 1~10 十个数字,我们要将它们相加求和,在学习 while 之前可能会直接用 + 运算符从 1 加到 10,也就是 1+2+3+4+5+6+7+8+9+10,但如果现在需要从 1 加到 1 万呢?10 万?所以,我们要引入 while 循环来进行循环相加,如下:
public class GetSum {
public static void main(String[] args) {
int x = 1; // 定义初值
int sum = 0; // 定义求和变量,用于存储相加后的结果
while(x <= 10) {
sum += x; // 循环相加,也即 sum = sum + x;
x++;
}
System.out.println(sum);
}
}
这就是一个从 1 加到 10 的代码,首先定义一个初值 x 为 1,然后定义一个存储相加结果的变量 sum 为 0,循环条件为 x<=10,也就是每次判断 x<=10 是否成立,成立则继续循环.循环内第一句"sum +=x;"其实就是"sum = sum +x;" 的另一种写法,是在 sum 的基础上加 x,并赋给 sum,那么此时 sum 的值为 0+1=1 了,然后 x++,x 自增 1 为 2,判断 x<=10,则继续循环,sum 的值变为 1+2=3,然后 x++ 变为 3,如此循环下去,直到 x 为 11 时退出循环,此时 sum 的值就是 1+2+3+4+5+6+7+8+9+10 最后的结果 55 了.
在 while 循环语句中,如果 while 语句后直接加分号,如 while(a == 5); 代表当前 while 为空语句,进入无线循环.
2. do···while 循环语句
do···while 循环语句与 while 循环语句的区别是,while 循环语句先判断条件是否成立再执行循环体,而 do···while 循环语句则先执行一次循环后,再判断条件是否成立.也即 do···while 至少执行一次.语法格式如下:
do
{
执行语句
} while (条件表达式);
下面对 while 循环语句与 do···while 循环语句进行一个对比:
public class Cycle {
public static void main(String[] args) {
int a = 10;
int b = 10;
// while循环语句
while(a == 8) {
System.out.println("a == " + a);
a--;
}
// do···while循环语句
do {
System.out.println("b == " + b);
b--;
} while(b == 8);
}
}
运行结果为:
这里,a,b 都为 10,先看 while 循环语句,进入 while 下语句块的条件是 a == 8,很明显不成立,所以不执行,结果中没有关于 a 的结果,然后再看 do···while 循环语句,先执行一次 do 后的语句块,输出 "b == 10",然后判断 while 条件 b == 8 不成立,循环结束,所以结果只有一个 do···while 语句中执行的第一步 b == 10.
3. for 循环语句
for 循环语句是 Java 程序设计中最有用的循环语句之一.一个 for 循环可以用来重复执行某条语句,知道某个条件得到满足.语法格式如下:
for(表达式1; 表达式2; 表达式3)
{
语句序列
}
其中,表达式 1 为初始化表达式,负责完成变量的初始化;表达式 2 为循环条件表达式,指定循环条件;表达式 3 为循环后操作表达式,负责修整变量,改变循环条件.三个表达式间用分号隔开
例:用 for 循环语句求 100 以内所有偶数的和.
public class Circulate {
public static void main(String[] args) {
int sum = 0;
for(int i=2; i<=100; i+=2) {
sum += i;
}
System.out.println(sum);
}
}
for 循环内,首先定义一个变量并赋初值,表示循环中 i 从 2 开始进行,然后条件为 i<=100,即 i<=100 时进行循环并执行语句块中的语句,第三个表达式"i+=2" 表示每次循环执行 i=i+1,即没循环一次,i 的值为在原来的基础上加 2 后的值.然后循环求 sum 的值,即 2+4+6+8+···+100,当 i=102 时退出循环,执行输出语句,输出结果为 2550.
说到 for 循环语句就不得提到 foreach 语句了,它是 Java5 后新增的 for 语句的特殊简化版本,并不能完全替代 for 语句,但所有 foreach 语句都可以改写为 for 语句.foreach 语句在遍历数组等时为程序员提供了很大的方便.语法格式如下:
for(元素变量x : 遍历对象obj) {
引用了x的Java语句;
}
下面举一个例子说明 foreach 怎么遍历的:
int array[] = {7, 8, 9};
for (int arr : array) {
System.out.println(arr);
}
array 是一个一维数组,其中有 7,8,9 三个值,现在要将这三个值打印到控制台上,用 foreach 语句相比 for 语句会简单很多.其中,在 for 的条件中,先定义了一个整型变量 arr(只要和要遍历的数组名不同即可),冒号后则是要遍历的数组名,那么{}间就是要循环的内容了.
四,跳转语句
Java 语言提供了三种跳转语句,分别是 break 语句,continue 语句和 return 语句.
1. break 语句
break 语句刚刚在 switch 中已经见过了,是用来中止 case 的.实际上 break 语句在 for,while,do···while 循环语句中,用于强行退出当前循环,为什么说是当前循环呢,因为 break 只能跳出离它最近的那个循环的循环体,假设有两个循环嵌套使用,break 用在内层循环下,则 break 只能跳出内层循环,如下:
for(int i=0; i<n; i++) { // 外层循环
for(int j=0; j<n ;j++) { // 内层循环
break;
}
}
2. continue 语句
continue 语句只能用于 for,while,do···while 循环语句中,用于让程序直接跳过其后面的语句,进行下一次循环.
例:输出 10 以内的所有奇数
public class ContinueDemo {
public static void main(String[] args) {
int i = 0;
while(i < 10) {
i++;
if(i%2 == 0) { // 能被2整除,是偶数
continue; // 跳过当前循环
}
System.out.print(i + " ");
}
}
}
这里 if 条件判断是否为偶数,如果是偶数则执行 continue,直接跳出本次循环,不进行 continue 后的步骤(即不执行输出语句),然后下一次循环为奇数,输出 i,运行结果如下:
3. return 语句
return 语句可以从一个方法返回,并把控制权交给调用它的语句.
public void getName() {
return name;
}
例如上方代码,这是一个方法用于获取姓名,当调用这个方法时将返回姓名值.
来源: https://www.cnblogs.com/adamjwh/p/8329496.html