1 选择结构if
1.1 if语句
在Java中,if语句的具体语法格式如下:
if (条件语句){
执行语句;
……
}
上述格式中,判断条件是一个布尔值,当判断条件为true时,{}中的执行语句才会执行。if语句的执行流程如下图所示。
接下来通过一段代码,学习一下if语句的具体用法
public class HelloWorld{
public static void main(String[] args){
int x = 5;
if (x < 10){
x++;
}
System.out.println("x="+x);
}
}
在上述代码中,定义了一个变量x,其初始值为5。在if语句的判断条件中判断x的值是否小于10,很明显条件成立,{}中的语句会被执行,变量x的值将进行自增。从运行结果可以看出,x的值已由原来的5变成了6。
1.2 if…else语句
if…else语句是指如果满足某种条件,就进行某种处理,否则就进行另一种处理。例如,要判断一个正整数的奇偶,如果该数字能被2整除则是一个偶数,否则该数字就是一个奇数。if…else语句具体语法格式如下:
if (判断条件){
执行语句1
……
}else{
执行语句2
……
}
上述格式中,判断条件是一个布尔值。当判断条件为true时,if后面{}中的执行语句1会执行。当判断条件为false时,else后面{}中的执行语句2会执行。if…else语句的执行流程如下图所示。
接下来通过一段代码,来实现判断奇偶数的程序
public class HelloWorld{
public static void main(String[] args){
int num = 19;
if (num%2 == 0){
//判断条件成立
System.out.println("num是一个偶数");
}else{
System.out.println("num是一个奇数");
}
}
}
上述代码中,变量num的值为19,模以2的结果为1,不等于0,判断条件不成立。因此会执行else后面{}中的语句,打印“num是一个奇数”。
1.3 if…else if…else语句
if…else if…else语句用于对多个条件进行判断,进行多种不同的处理。例如,对一个学生的考试成绩进行等级的划分,如果分数大于80分等级为优,否则,如果分数大于70分等级为良,否则,如果分数大于60分等级为中,否则,等级为差。if…else if…else语句具体语法格式如下:
if (判断条件1) {
执行语句1
} else if (判断条件2) {
执行语句2
}
...
else if (判断条件n) {
执行语句n
} else {
执行语句n+1
}
上述格式中,判断条件是一个布尔值。当判断条件1为true时,if后面{}中的执行语句1会执行。当判断条件1为false时,会继续执行判断条件2,如果为true则执行语句2,以此类推,如果所有的判断条件都为false,则意味着所有条件均未满足,else后面{}中的执行语句n+1会执行。if…else if…else语句的执行流程如下图所示。
接下来通过一段代码,来实现对学生考试成绩进行等级划分的程序
public class HelloWorld{
public static void main(String[] args){
int grade = 75; //定义学生成绩
if (grade > 80) {
//满足条件 grade > 80
System.out.println("该成绩等级为优");
}else if (grade > 70){
//满足条件 grade > 70
System.out.println("该成绩等级为良");
}else if (grade > 60){
//满足条件 grade > 60
System.out.println("该成绩等级为中");
}
else{
//以上都不满足
System.out.println("该成绩等级为差");
}
}
}
上述代码中,定义了学生成绩grade为75。它不满足第一个判断条件grade>80,会执行第二个判断条件grade>70,条件成立,因此会打印“该成绩的等级为良”。
1.4 选择结构if语句与三元运算转换
三元运算符,它和if-else语句类似,语法如下:
判断条件 ? 表达式1 : 表达式2
三元运算符会得到一个结果,通常用于对某个变量进行赋值,当判断条件成立时,运算结果为表达式1的值,否则结果为表达式2的值。例如求两个数x、y中的较大者,如果用if…else语句来实现,具体代码如下:
public class HelloWorld{
public static void main(String[] args){
int x = 0;
int y = 1;
int max;
if (x>y){
max = x;
}else{
max =y;
}
System.out.println(max);
}
}
上面的代码运行之后,变量max的值为1。上述代码可以使用三元运算符代替
int max = x > y ? x : y;
2 循环结构
2.1 循环语句while
while循环语句和选择结构if语句有些相似,都是根据条件判断来决定是否执行大括号内的执行语句。区别在于,while语句会反复地进行条件判断,只要条件成立,{}内的执行语句就会执行,直到条件不成立,while循环结束。while循环语句的语法结构如下:
while(循环条件){
执行语句
………
}
在上面的语法结构中,{}中的执行语句被称作循环体,循环体是否执行取决于循环条件。当循环条件为true时,循环体就会执行。循环体执行完毕时会继续判断循环条件,如条件仍为true则会继续执行,直到循环条件为false时,整个循环过程才会结束。
while循环的执行流程如下图所示。
接下来通过一段代码,来实现打印1~4之间的自然数
public class HelloWorld{
public static void main(String[] args){
int x = 1; //定义变量x,初始值为1
while (x <= 4){ //循环条件
System.out.println("x="+x); //条件成立,打印x的值
x++; //x进行自增
}
}
}
在上述代码中,x初始值为1,在满足循环条件x <= 4的情况下,循环体会重复执行,打印x的值并让x进行自增。因此打印结果中x的值分别为1、2、3、4。
大家要注意的是,代码x++用于在每次循环时改变变量x的值,从而达到最终改变循环条件的目的。如果没有这行代码,整个循环会进入无限循环的状态,永远不会结束。
2.2 循环语句for
for循环语句是最常用的循环语句,一般用在循环次数已知的情况下。for循环语句的语法格式如下:
for(初始化表达式; 循环条件; 操作表达式){
执行语句
………
}
在上面的语法结构中,for关键字后面()中包括了三部分内容:初始化表达式、循环条件和操作表达式,它们之间用“;”分隔,{}中的执行语句为循环体。
接下来分别用1表示初始化表达式、2表示循环条件、3表示操作表达式、4表示循环体,通过序号来具体分析for循环的执行流程。具体如下:
for(1 ; 2 ; 3){
4
}
第一步,执行1
第二步,执行2,如果判断结果为true,执行第三步,如果判断结果为false,执行第五步
第三步,执行4
第四步,执行3,然后重复执行第二步
第五步,退出循环
接下来通过一个案例对自然数1~4进行求和
public class HelloWorld{
public static void main(String[] args){
int sum = 0; //定义变量sum,用于记录累加的和
for (int i = 1;i <= 4;i++){ //i的值会在1~4之间变化
sum += i; //实现i值的累加
}
System.out.println(sum);
}
}
上述代码中,变量i的初始值为1,在判断条件i<=4为true的情况下,会执行循环体sum+=i,执行完毕后,会执行操作表达式i++,i的值变为2,然后继续进行条件判断,开始下一次循环,直到i=5时,条件i<=4为false,结束循环,执行for循环后面的代码,打印“sum=10”。
2.3 循环语句do…while
do…while循环语句和while循环语句功能类似,其语法结构如下:
do {
执行语句
………
} while(循环条件);
在上面的语法结构中,关键字do后面{}中的执行语句是循环体。do…while循环语句将循环条件放在了循环体的后面。这也就意味着,循环体会无条件执行一次,然后再根据循环条件来决定是否继续执行。
do…while循环的执行流程如下图所示。
接下来使用do…while循环语句来实现打印1~4之间的自然数
public class HelloWorld{
public static void main(String[] args){
int x = 1; //定义变量x,初始值为1
do{
System.out.println("x="+x); //打印x的值
x++; //x的值自增
} while(x <= 4); //循环条件
}
}
2.4 循环嵌套
嵌套循环是指在一个循环语句的循环体中再定义一个循环语句的语法结构。while、do…while、for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套,如最常见的在for循环中嵌套for循环,格式如下:
for(初始化表达式; 循环条件; 操作表达式) {
………
for(初始化表达式; 循环条件; 操作表达式) {
执行语句
………
}
………
}
接下来通过一个练习,来实现使用“*”打印直角三角形
public class HelloWorld{
public static void main(String[] args){
int i,j; //定义两个循环变量
for (i=1;i <= 9;i++){ //外层循环
for (j=1;j <= i;j++){ //内层循环
System.out.print("*"); //打印*
}
System.out.print("\n"); //换行
}
}
}
运行结果如下所示
在上述代码中定义了两层for循环,分别为外层循环和内层循环,外层循环用于控制打印的行数,内层循环用于打印“”,每一行的“”个数逐行增加,最后输出一个直角三角形。
2.5 跳转语句(break、continue)
跳转语句用于实现循环执行过程中程序流程的跳转,在Java中的跳转语句有break语句和continue语句。
1、break语句
在switch条件语句和循环语句中都可以使用break语句。当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。当它出现在循环语句中,作用是跳出循环语句,执行后面的代码。
public class HelloWorld{
public static void main(String[] args){
int x = 1; //定义变量x,初始值为1
while (x <= 4){ //循环条件
System.out.println("x="+x); //条件成立,打印x的值
if (x == 3){
break;
}
x++; //x进行自增
}
}
}
运行结果
在上述带代码中,通过while循环打印x的值,当x的值为3时使用break语句跳出循环。因此打印结果中并没有出现“x=4”。
2、标记
当break语句出现在嵌套循环中的内层循环时,它只能跳出内层循环,如果想使用break语句跳出外层循环则需要对外层循环添加标记。如下所示,只能打印4行“*”。
public class HelloWorld{
public static void main(String[] args){
int i,j; //定义两个循环变量
itcase: for (i=1;i <= 9;i++){
for (j=1;j <=i;j++){
if (i > 4){
break itcase;
}
System.out.print("*");
}
System.out.print("\n");
}
}
}
3、continue语句
continue语句用在循环语句中,它的作用是终止本次循环,执行下一次循环。接下来通过一个练习对1~100之内的奇数求和
public class HelloWorld{
public static void main(String[] args){
int sum = 0;
for (int i = 1;i <= 100;i++){
if (i%2 == 0){ //判定i为偶数
continue; //结束本次循环
}
sum += i; //计算累计和
}
System.out.println("sum = "+sum);
}
}
上述代码中,使用for循环让变量i的值在1100之间循环,在循环过程中,当i的值为偶数时,将执行continue语句结束本次循环,进入下一次循环。当i的值为奇数时,sum和i进行累加,最终得到1100之间所有奇数的和,打印“sum = 2500”。
在嵌套循环语句中,continue语句后面也可以通过使用标记的方式结束本次外层循环,用法与break语句相似,在此不再举例说明。
3 流程控制语句(switch)
switch 条件语句也是一种很常用的选择语句,它和if条件语句不同,它只能针对某个表达式的值作出判断,从而决定程序执行哪一段代码。例如,在程序中使用数字1~7来表示星期一到星期天,如果想根据某个输入的数字来输出对应中文格式的星期值,可以通过下面的一段伪代码来描述:
用于表示星期的数字
如果等于1,则输出星期一
如果等于2,则输出星期二
如果等于3,则输出星期三
如果等于4,则输出星期四
如果等于5,则输出星期五
如果等于6,则输出星期六
如果等于7,则输出星期天
对于上面一段伪代码的描述,大家可能会立刻想到用刚学过得if…else if…else语句来实现,但是由于判断条件比较多,实现起来代码过长,不便于阅读。Java中提供了一种switch语句来实现这种需求,在switch语句中使用switch关键字来描述一个表达式,使用case关键字来描述和表达式结果比较的目标值,当表达式的值和某个目标值匹配时,会执行对应case下的语句。具体实现代码如下:
switch (表达式){
case 目标值1:
执行语句1
break;
case 目标值2:
执行语句2
break;
......
case 目标值n:
执行语句n
break;
default:
执行语句n+1
break;
}
在上面的格式中,switch语句将表达式的值与每个case中的目标值进行匹配,如果找到了匹配的值,会执行对应case后的语句,如果没找到任何匹配的值,就会执行default后的语句。switch语句中的break关键字将在后面的做具体介绍,此处,我们只需要知道break的作用是跳出switch语句即可。
3.1 选择结构switch练习
接下来通过一个案例演示根据数字来输出中文格式的星期
public class HelloWorld{
public static void main(String[] args){
int week = 5;
switch (week){
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语句的过程中,如果多个case条件后面的执行语句是一样的,则该执行语句只需书写一次即可,这是一种简写的方式。例如,要判断一周中的某一天是否为工作日,同样使用数字1~7来表示星期一到星期天,当输入的数字为1、2、3、4、5时就视为工作日,否则就视为休息日。接下来通过一个案例来实现上面描述的情况
public class HelloWorld{
public static void main(String[] args){
int week = 2;
switch (week){
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("工作日");
break;
case 6:
case 7:
System.out.println("休息日");
break;
default:
System.out.println("输入的数字不正确...");
break;
}
}
}
网友评论