流程控制语句

时间:2022-09-08 17:03:59

Java条件语句之 if

 

生活中,我们经常需要先做判断,然后才决定是否要做某件事情。例如,如果考试成绩大于 90 分,则奖励一个 IPHONE 5S 。对于这种“需要先判断条件,条件满足后才执行的情况”,就可以使用 if 条件语句实现。

语法:

流程控制语句

执行过程:

流程控制语句

例如:

流程控制语句

注意:如果 if 条件成立时的执行语句只有一条,是可以省略大括号滴!但如果执行语句有多条,那么大括号就是不可或缺的~~

例子:实现功能“判断变量 one 的值是否是偶数”

运行结果为: one是偶数

流程控制语句

 

  • Java条件语句之 if...else

 

if...else 语句的操作比 if 语句多了一步:  当条件成立时,则执行 if 部分的代码块; 条件不成立时,则进入 else 部分。例如,如果考试成绩大于 90 分,则奖励一个 IPHONE 5S ,否则罚做 500 个俯卧撑。

语法:

流程控制语句

执行过程:

流程控制语句

例如:

流程控制语句

例子:如果年龄大于等于 18 岁,则提示成年了,否则提示未成年”

运行结果为: 成年

流程控制语句

 

  • Java条件语句之多重 if

 

多重 if 语句,在条件 1 不满足的情况下,才会进行条件 2 的判断;当前面的条件均不成立时,才会执行 else 块内的代码。例如,如果考试成绩大于 90 分,则奖励一个 IPHONE 5S ,如果成绩介于 70 分至 90 分之间,则奖励一个红米,否则罚做 500 个俯卧撑。

语法:

流程控制语句

执行过程:

流程控制语句

例如:

流程控制语句

该段代码的含义是:如果 score 值大于90,则奖励一个 Iphone 5s ,当 score 值小于等于 90 时,先判断 score 是否大于 70 ,如果 score 是介于 70--90 之间,则奖励一个红米,如果成绩小于等于 70 ,则罚做 500 个俯卧撑

当需要判断的条件是连续的区间时,使用多重 if 语句是非常方便滴!

应用多重 if 语句,补全代码实现如下功能:

例子:假设年龄大于 60 岁,则提示“老年”;如果年龄介于 40 岁至 60 岁之间,则提示“中年”;如果年龄介于 18 岁至 40 岁之间,则提示“少年”; 18 岁以下则提示“童年”

运行结果为: 少年

流程控制语句

 

  • Java条件语句之嵌套 if

 

嵌套 if 语句,只有当外层 if 的条件成立时,才会判断内层 if 的条件。

语法:

流程控制语句

执行过程:

流程控制语句

例如:活动计划的安排,如果今天是工作日,则去上班,如果今天是周末,则外出游玩;同时,如果周末天气晴朗,则去室外游乐场游玩,否则去室内游乐场游玩。

运行结果为: 去室外游乐场游玩

流程控制语句

 

例子:预赛成绩大于 80 分的可进入决赛,然后根据性别再划分为男子组决赛和女子组决赛。

运行结果为: 进入女子组决赛

流程控制语句

 

*******************Java 中关于 if 语句描述**********************

  1. if 语句是根据条件判断之后再做处理的一种语法结构
  2. 关键字 if 后小括号里面条件表达式的值必须为布尔类型
  3. if 语句可以和 else 一起使用
  4. if 后小括号里必须是一个条件表达式,结果为布尔值,如果为 true ,则执行后面大括号中的代码,如果为 false ,则不执行

***********************************************************

 

  • Java条件语句之 switch

当需要对选项进行等值判断时,使用 switch 语句更加简洁明了。

 语法:

流程控制语句

执行过程:当 switch 后表达式的值和 case 语句后的值相同时,从该位置开始向下执行,直到遇到 break 语句或者 switch 语句块结束;如果没有匹配的 case 语句则执行 default 块的代码。

例如:

流程控制语句

*********不得不说的几点小秘密***************

1、 switch 后面小括号中表达式的值必须是整型或字符型。

2、 case 后面的值可以是常量数值,如 1、2;也可以是一个常量表达式,如 2+2 ;但不能是变量或带有变量的表达式,如 a * 2。

3、 case 匹配后,执行匹配块里的程序代码,如果没有遇见 break 会继续执行下一个的 case 块的内容,直到遇到 break 语句或者 switch 语句块结束 。

4.switch 语句中可以没有 break。

****************************************

例如:根据考试的名次,给予前 4 名不同的奖品。第一名,奖励笔记本一台;第二名,奖励 IPAD 2 一个;第三名,奖励移动电源一个;最后一名奖励 U 盘一个。

运行结果为:奖励笔记本一台

流程控制语句

4、 可以把功能相同的 case 语句合并起来,如

流程控制语句

5、 default 块可以出现在任意位置,也可以省略

例子:使用 switch 语句补全代码,设置属于你的菜谱:如果今天是星期一、三、五,则早餐吃包子,如果是星期二、四、六,则早餐吃油条,如果是星期日,则吃“主席套餐”

运行结果为: 吃主席套餐

流程控制语句

  •  Java循环语句之 while

生活中,有些时候为了完成任务,需要重复的进行某些动作。

Java 常用的 3 种循环: while 、 do...while 、 for

1)while

语法:

流程控制语句

执行过程:

< 1 >、 判断 while 后面的条件是否成立( true / false )

< 2 >、 当条件成立时,执行循环内的操作代码 ,然后重复执行< 1 >、< 2 >, 直到循环条件不成立为止

特点:先判断,后执行

例如:参加 10000 米长跑,需要绕 400 米的赛道反复的跑 25 圈。在 Java 中实现功能时,也经常需要重复执行某些代码,例如,我们为了表示“浓烈的爱”,希望输出 1000 行"我爱慕课网!"。显然,此时重复敲 1000 遍输出语句是不靠谱滴!!那么,有木有好的办法来解决呢? 有,循环语句!

流程控制语句

例子:

实现功能:顺序输出 1 ~ 5 这 5 个数字。

实现思路:使用一个变量 i 代表 1 - 5 之间的数字,值从 1 开始,每次循环时输出 i 的值,并且对 i 的值加 1 ,只要 i 小于等于数字 5 就执行该循环,将 while 语句的条件补充完整,程序运行结果:

流程控制语句

流程控制语句

  • Java循环语句之 do...while

  do...while 循环与 while 循环语法有些类似,但执行过程差别比较大。

  语法:

流程控制语句

执行过程:

<1>、 先执行一遍循环操作,然后判断循环条件是否成立

<2>、 如果条件成立,继续执行< 1 > 、< 2 >,直到循环条件不成立为止

特点: 先执行,后判断

由此可见,do...while 语句保证循环至少被执行一次

例如,依然输出 1000 遍“我爱慕课网”,使用 do...while 的实现代码为:

流程控制语句

实现功能:计算 50 以内(包括 50 )的偶数之和

实现思路:首先定义一个变量 sum ,用来保存所有偶数的和,然后定义一个变量 num 代表 1--50 之间的偶数,值从 2 开始,每次循环执行时将 num 的值累加保存在变量 sum 中,并且将 num 值加 2 (偶数嘛,你懂得哈~~),只要 num 的值在 1--50 之内就重复执行该循环,

运行结果为: 50以内的偶数之和为:650

流程控制语句

 

  •  Java循环语句之 for

Java 的循环结构中除了 while 和 do...while 外,还有 for 循环,三种循环可以相互替换。

语法: 

流程控制语句

***************************执行过程:*********************************************

<1>、 执行循环变量初始化部分,设置循环的初始状态,此部分在整个循环中只执行一次

<2>、 进行循环条件的判断,如果条件为 true ,则执行循环体内代码;如果为 false ,则直接退出循环

<3>、 执行循环变量变化部分,改变循环变量的值,以便进行下一次条件判断

<4>、 依次重新执行< 2 >、< 3 >、< 4 >,直到退出循环

特点:相比 while 和 do...while 语句结构更加简洁易读

************************************************************************

例如,输出 1000 遍“我爱慕课网”,使用 for 的实现代码为:

流程控制语句

******************需要留心的几个小细节:************************************

1、 for 关键字后面括号中的三个表达式必须用 “;” 隔开,三个表达式都可以省略,但 “;” 不能省略。

    a. 省略“循环变量初始化”,可以在 for 语句之前由赋值语句进行变量初始化操作,如:

流程控制语句

  b. 省略“循环条件”,可能会造成循环将一直执行下去,也就是我们常说的“死循环”现象,如:

流程控制语句

在编程过程中要避免“死循环”的出现,因此,对于上面的代码可以在循环体中使用 break 强制跳出循环(关于 break 的用法会在后面介绍)。

    c. 省略“循环变量变化”,可以在循环体中进行循环变量的变化,如:

流程控制语句

2、 for 循环变量初始化和循环变量变化部分,可以是使用 “,” 同时初始化或改变多个循环变量的值,如:

流程控制语句

代码中,初始化变量部分同时对两个变量 i 和 j 赋初值,循环变量变化部分也同时对两个变量进行变化,运行结果:

流程控制语句

3、 循环条件部分可以使用逻辑运算符组合的表达式,表示复杂判断条件,但一定注意运算的优先级,如:

流程控制语句

代码中,必须同时满足变量 i 小于 10 ,并且 i 不等于 5 时才会进行循环,输出变量 i 的值。

*********************************************************************************

例子:计算 1 到 100 之间不能被 3 整除的数之和。

运行结果为: 1到100之间不能被3整除的数之和为:3367

流程控制语句

关于循环说法:

**while 循环先判断后执行,do...while 先执行后判断

**do...while 循环结束的条件是 while 后的条件不成立

**do...while 循环的循环体至少无条件执行一次

**for 语句构成的循环可以用其他循环语句替换

 

  • Java循环跳转语句之 break

例如,使用循环输出 1--10的数值,其中,如果数值大于 2 ,并且为 3 的倍数则停止输出。

实现代码:

流程控制语句

运行结果:

流程控制语句

例子:循环将 1 到 10 之间的整数相加,如果累加值大于 20,则跳出循环,并输出当前的累加值。

运行结果为: 当前的累加值为:21

流程控制语句

  • Java循环跳转语句之 continue

continue 的作用是跳过循环体中剩余的语句执行下一次循环(continue 语句的作用是结束本次循环的执行,执行下一次循环)。

例如:求 1 到 10 之间的所有偶数的和。

运行结果为: 1到10之间的所有偶数的和为:30

流程控制语句

**************break 语句和 continue 语句作用并不相同, break 表示结束整个循环,而 continue 表示仅结束本次循环****************

 

  • Java 循环语句之多重循环

流程控制语句

例如:使用 * 打印长方形:

流程控制语句

实现代码为:

流程控制语句

执行流程:当 i = 1 时,外层循环条件成立,进入内层循环,开始打印第一行内容。此时, j 从 1 开始,循环 8 次,内层循环结束后换行,实现第一行 8 个 * 的输出。接下来返回外层循环 i 变为 2 ,准备打印下一行,依此类推,直到完成长方形的打印。

例子:使用 * 打印直角三角形

效果如下:

流程控制语句

流程控制语句

 

循环体中包含循环语句的结构称为多重循环。三种循环语句可以自身嵌套,也可以相互嵌套,最常见的就是二重循环。在二重循环中,外层循环每执行一次,内层循环要执行一圈。  例如:判断一个数(小于10位)的位数。

输入999,则输出 “它是个3位的数!”

流程控制语句

 例子:未指定成绩加分,直到分数大于等于60为止,输出加分前和加分后的成绩,并统计加分的次数

 运行效果:

流程控制语句

流程控制语句

例子:循环将 1 到 10之间的整数相加,如果累加值大于 20,则跳出循环,并输出当前的累加值。

package com.imooc;

import java.util.Scanner;

//循环将 1 到 10之间的整数相加,如果累加值大于 20,则跳出循环,并输出当前的累加值。


public class HelloWorld {

/**
* @param args
*/
public static void main(String[] args) {
//实现接收三个班级的各四名学员的成绩信息,然后计算每个班级学员的平均分
int classNum=3;//班级数量
int stuNum=4;//学生数量
double sum=0;//成绩总和
double avg=0;//平均成绩
Scanner sc=new Scanner(System.in);//创建Scanner对象
for(int i=1;i<=classNum;i++){//外层循环控制班级的数量
sum=0;//成绩总和归0;
System.out.println("请输入第"+i+"个班级的成绩");
for(int j=1;j<=stuNum;j++){//内层循环控制每个班级的学生数量
System.out.println("请输入第"+j+"个学员的成绩:");
int score=sc.nextInt();//获取输入的成绩
sum=sum+score;//成绩累加求和

}
avg=sum/stuNum;//计算平均分
System.out.println("第"+i+"各班级学生的平均成绩为:"+avg);
}
}
}

 万年历程序

package test;

import java.util.Date;
import java.util.Scanner;

public class First {
public static int isRun(int y){
int n;
if (y%4==0 && y%100!=0 || y%400==0) {
n=1;
}else{
n=0;
}
return n;



}
public static void main(String[] args) {

Scanner sc=new Scanner(System.in);
System.out.println("万年历程序");
int y,m,d;
while (true) {
System.out.println();
System.out.println("1判断一年是否有闰年");
System.out.println("2输入任何年月日,判断是星期几");
System.out.println("3输入任何年月,来判断这个月有多少天");
System.out.println("4输入任何年月,把月历输出");
System.out.println("5输入任何年,把年历输出");
System.out.println("6输入任何年月日,计算距离今天有多少天");
System.out.println("0程序退出");
int n=sc.nextInt();
if (n==1) {
System.out.println("请输入年");
y=sc.nextInt();
if (isRun(y)==1) {
System.out.println(y+"是闰年");
}else{
System.out.println(y+"不是闰年");
}
}
if (n==2) {
System.out.println("请输入年");
y=sc.nextInt();
System.out.println("请输入月");
m=sc.nextInt();
System.out.println("请输入日");
d=sc.nextInt();
System.out.println(y+"年"+m+"月"+d+"日是星期"+week(y,m,d));

}
if (n==3) {
System.out.println("请输入年");
y=sc.nextInt();
System.out.println("请输入月");
m=sc.nextInt();
System.out.println(y+"年"+m+"月"+tianshu(y,m));
}
if (n==4) {
System.out.println("请输入年");
y=sc.nextInt();
System.out.println("请输入月");
m=sc.nextInt();
int tab=0;
System.out.println("日\t一\t二\t三\t四\t五\t六");
int xingqi=week(y,m,1);
for (int i = 1; i <= xingqi; i++) {
System.out.print("\t");
tab++;
}

for (int i = 1; i <=tianshu(y,m); i++) {
System.out.print(i+"\t");
tab++;
if (tab%7==0) {
System.out.println("\n");
}
}
}
if (n==5) {
System.out.println("请输入年");
y=sc.nextInt();
for (int k =1; k <= 12; k++) {
int tab=0;
System.out.println("\n"+k+"月");
System.out.println("日\t一\t二\t三\t四\t五\t六");
int xingqi=week(y,k,1);
for (int i = 1; i <= xingqi; i++) {
System.out.print("\t");
tab++;
}

for (int i = 1; i < tianshu(y,k); i++) {
System.out.print(i+"\t");
tab++;
if (tab%7==0) {
System.out.println( );
}
}
}
}
if (n==6) {
System.out.println("请输入年");
y=sc.nextInt();
System.out.println("请输入月");
m=sc.nextInt();
System.out.println("请输入日");
d=sc.nextInt();
Date dat=new Date();
int y1=dat.getYear()+1900;
int m1=dat.getMonth()+1;
int d1=dat.getDate();
int days=0;
for (int i =y+1; i < y1; i++) {
if (isRun(i)==1) {
days=366+days;
}else{
days=365+days;
}
}
for (int i = 1; i < m1; i++) {
days+=tianshu(y,1);
}
days+=d1-1;
int ts=0;
for (int i = 1; i < m; i++) {
ts+=tianshu(y,i);
}
ts+=d-1;
if (isRun(y)==1) {
days=366+days-ts;

}else{
days=365+days-ts;
}
System.out.println("差"+days+"天数");
}
if (n==0) {
System.out.println("谢谢使用");
}
}
}
public static int tianshu(int y, int m) {
int days=0;
if (m==1 ||m==3 || m==5 || m==7 || m==8 || m==10 || m==12) {
days=31;
}
if (m==4 || m==6 || m==9 || m==11) {
days=30;
}
if (m==2) {
if(isRun(y)==1){
days=29;
}else{
days=28;
}
}
return days;
// TODO Auto-generated method stub

}
public static int week(int y, int m, int d) {
// TODO Auto-generated method stub
Date da=new Date(y-1900,m-1,d);

return da.getDay();
}


}