9. 流程控制语句
在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说程序的流程对运行结果有直接的影响。在清楚每条语句的执行流程的前提下,才能通过控制语句的执行顺序来实现我们要完成的功能。
9.1 条件语句
在Java代码块中,程序默认是顺序结构: 编写的程序语句按照顺序依次被执行。
如果要某条代码在满足条件下才执行?
if条件语句主要用于告知程序当某一个条件成立时,须执行满足该条件的相关语句。
9.1.1 if语句 (单一条件)
如果表达式值为true,则执行花括号的内容后,再执行后面的语句 如果表达的值为false,则直接执行后面的语句
9.1.2 if...else语句(二选一)
if...else语句作用:针对某种条件有选择地做出处理 如果布尔表达式的值为true,则执行语句1 如果布尔表达式的值为false,则执行语句2
9.1.3 if...else if条件语句
如果满足某一个条件,就采用与该条件对应的处理方式;如果满足另一个条件,则采用与另一个条件对应的处理方法。
import java.util.Scanner;
/**
* 创建时间: 2020年11月14日09:02:10
* 作者 :jshand
* 描述 : 流程控制语句 , 条件
*/
public class Controller1 {
public static void main(String[] args) {
// if(条件表达式)
// 如果表达式为真,则执行的代码
//
//
//
// if(条件表达式) {
// 如果表达式为真,则执行的代码1
// 如果表达式为真,则执行的代码2
// }
/**
* 接受用户的输入
*/
Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
//单分支
// if(age>=60){
// System.out.println("年龄满足退休条件,恭喜....");
// }
//if else
// if(age>=60){
// System.out.println("年龄满足退休条件,恭喜....");
// }else{
// System.out.println("不满足退休息条件,继续加油.....");
// }
//if else if
// if(age>=60){
// System.out.println("年龄满足退休条件,恭喜....");
// }else if(age>=55){
// System.out.println("快退休了,继续加油.....");
// }
//if else if eslse
if(age>=60){
System.out.println("年龄满足退休条件,恭喜....");
}else if(age>=55){
System.out.println("快退休了,继续加油.....");
}else{
System.out.println("早着呢,.....");
}
System.out.println("程序end...");
}
}
9.1.4 练习
- 编写java程序,完成以下功能:假设有整型变量x,判断x是否为偶数,若为偶数,则在控制台上打印“输入的数值是偶数”。无论x是否为偶数,最后都要在控制台上输出x的值
- 有一个数字为45327,判断该数字是否能被13整除,是否能被17整除
- 有两个整型变量x,y,请编写代码在控制台上输出x与y中值较大的那个数。
- 判断2064年是不是闰年。
闰年判断规则: 能被400整除的是闰年 能被100整除,不能被400整除的不是闰年 能被4整除,不能被100整除的是闰年 其他的不是闰年
/*
* 项目: java1112
* 创建时间:2020/11/14 9:35
* 作者 :jshand
* 描述 :条件语句 的练习
*/
public class Test1 {
public static void main(String[] args) {
/*
* 编写java程序,完成以下功能:
* 假设有整型变量x,
* 判断x是否为偶数,
* 若为偶数,则在控制台上打印“输入的数值是偶数”。
*
* 无论x是否为偶数,最后都要在控制台上输出x的值
*/
// int x = 5;
// if( x%2 == 0){
// System.out.println("输入的数值是偶数");
// }
// System.out.println(x);
/*
* 有一个数字为45327,
* 判断该数字是否能被13整除,
* 是否能被17整除
*/
int num = 45327;
// if(num % 13 == 0){
// System.out.println("能被13 整除");
// }else if(num %17 == 0){
// System.out.println("能被17 整除");
// }
if(num % 13 == 0 && num %17 == 0){
System.out.println("能被13 和17 整除");
}
/*
* 有两个整型变量x,y,请编写代码在控制台上输出x与y中值较大的那个数。
*/
// java.util.Scanner sc = new java.util.Scanner(System.in);
//
// System.out.print("请出入x:>");
// int x = sc.nextInt();
//// System.out.println("x:"+x);
// System.out.print("请出入y:>");
// int y = sc.nextInt();
//// System.out.println("y:"+y);
// if(x>y){
// System.out.println("最大的值是:"+x);
// }else{
// System.out.println("最大的值是:"+y);
// }
/*
* 判断2064年是不是闰年
*
* 1 能被400整除的是闰年
* 2 能被100整除,不能被400整除的不是闰年
* 2 能被4整除,不能被100整除的是闰年 其他的不是闰年
*/
int year = 2064;
if(year % 400 == 0){
System.out.println(year+"是闰年");
}else if(year%4 ==0 && year%100 !=0){
System.out.println(year+"是闰年");
}else{
System.out.println(year+"不是闰年");
}
}
}
9.1.5 switch条件语句
switch语句特点:
表达式的值只可以接受int、byte、char、short 、String型,不接受其他类型的值 表达式的值接受String类型只在JDK7及以后版本有效 switch case中的值必须要与switch表达式的值具有相同的数据类型。而且case后跟的值必须是常量,不能跟变量。
不允许有重复的case取值 switch一旦碰到第一次case匹配,程序就会跳转到这个标签位置,开始顺序执行以后所有的程序代码,而不管后面的case条件是否匹配,直到碰到break关键字或者结束switch语句的大括号为止
case之间与default没有顺序。先判断所有的case,没有匹配的case执行default。因此一般将default放在case后面。 switch语句停止的条件是遇到了break关键字或者结束switch语句的大括号。
语法格式如下:
import java.util.Scanner;
/**
* 创建时间: riqi
* 作者 :jshand
* 描述 : 流程控制语句 , switch
*/
public class Controller2 {
public static void main(String[] args) {
char score ='V';
switch (score){
case 'A':
System.out.println("分数为A");
break;//使用break语句结束分支条件,否则如果满足A,那么下面的分支也会执行
case 'B':
System.out.println("分数为B");
break;
default:
System.out.println("未知的分数");
break;
}
}
}
switch表达式值类型 ,String 从jdk1.7+
char, byte, short, int, Character, Byte, Short, Integer, String, or an enum'
9.2循环语句
顺序结构和流程控制的程序语句只能被执行一次。如果您想要同样的操作执行多次,就需要使用循环结构,例如: 代码多次执行:输出100次“祖国您好!”。 代码有规律多次执行:顺序输出0到10的整数。
while语句 do...while语句 for语句
foreach语句
9.2.1 while
9.2.2 do{...}while();
9.2.3 循环语句实现
/**
* 项目: java1112
* 创建时间:2020/11/14 10:34
* 作者 :jshand
* 描述 :while循环、do{...}while(); for循环
*/
public class Controller3 {
public static void main(String[] args) {
// int i = 0;
// while(i<10){
// System.out.println("hello"+i);
// i++;
// }
// System.out.println("last i:"+i);
// int i = 0;
// do{
// System.out.println("hello"+i);
// i++;
// }while(i<10);
//
// System.out.println("last i:"+i);
// for (初始条件; 判断条件;循环后的操作表达式){
// 执行的语句
// }
for(int i=0;i<10;i++){
System.out.println("hello"+i);
}
}
}
9.2.4 练习
计算1+2+3+…+100的和(提示利用while语句)
计算从1到100的所有奇数相加(提示利用while语句)
计算1+2+3+…+100的和(用do while 循环完成)
用for循环改写从1到100的所有奇数相加的和
循环得到用户从控制台输入的5个整数,该整数为用户购买商品的价格,计算用户一共需要花费的总金额。
随机产生一个10以内的正整数,用户循环输入三个整数,如果用户输入的整数包含随机数,输出“猜对了”;反之,输出“没猜到”。 例如: 随机数为4,用户输入数为:2,3,4。输出:猜对了 随机数为4,用户输入数为:1,2,3。输出:没猜到
9.2.5.流程控制进阶
嵌套
在Java语言中,流程控制语句可以嵌套使用
嵌套循环语句
嵌套条件语句
循环、条件语句嵌套使用
/**
* 项目: java1112
* 创建时间:2020/11/14 13:32
* 作者 :jshand
* 描述 :循环的嵌套
*/
public class Controller4 {
public static void main(String[] args) {
// 乘法口诀
// 1*1 = 1
// 1*2 = 2 2*2 =4
// 1*3 = 3 2*3 =6 3*3 = 9
int a = 10;
//i 代表循环的行
for (int i = 1; i <10 ; i++) {
//j 代表每行所在的列
for (int j = 1; j <= i; j++) {
// System.out.print(j+"*"+i+"="+(j*i));
System.out.print(j + " * " + i + "= " + (j * i) + "\t");
}
System.out.println();
}
}
}
注意:
1 缩进
2 变量的作用域
死循环
靠自身控制无法终止的程序称为“死循环”
流程中断
在使用循环语句时,只有循环条件表达式的值为false时,才能结束循环。有时,我们想提前中断循环,要实现这一点,只需要在循环语句块中添加break或continue语句:
javafor (int i = 1; i <10 ; i++) { if(i>5){ break; } //j 代表每行所在的列 for (int j = 1; j <= i; j++) { // System.out.print(j+"*"+i+"="+(j*i)); System.out.print(j + " * " + i + "= " + (j * i) + "\t"); } System.out.println(); }
javafor (int i = 1; i <10 ; i++) { if(i==5){ continue; //结束本次循环,进入下一次循环 } //j 代表每行所在的列 for (int j = 1; j <= i; j++) { // System.out.print(j+"*"+i+"="+(j*i)); System.out.print(j + " * " + i + "= " + (j * i) + "\t"); } System.out.println(); }
9.3 课后练习
1、企业发放的奖金根据利润提成。利润低于或等于10万元时,奖金可提10%;利润高于10万元,低于或等于20万元时,高于10万元的部分,可提成7.5%;高于20万,低于或等于40万时,高于20万元的部分,可提成5%;高于40万,低于或等于60万时,高于40万元的部分,可提成3%;高于60万,低于或等于100万时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,输入一个整数变量为当月利润,求应发放奖金总数?(知识点:条件语句)
2、输入一个成绩a,使用switch结构求出a的等级。A:90-100,B:80-89,C:70-79,D:60-69,E:0~59(知识点:条件语句switch)
3、输入一个数字,判断是一个奇数还是偶数(知识点:条件语句)
4、编写程序, 判断一个随机变量x的值,如果是1,输出x=1,如果是5,输出x=5,如果是10,输出x=10,除了以上几个值,都输出x=none。(知识点:条件语句)
5、判断一个随机整数是否能被5和6同时整除(打印能被5和6整除),或只能被5整除(打印能被5整除),或只能被6整除,(打印能被6整除),不能被5或6整除,(打印不能被5或6整除)(知识点:条件语句)
7、输入一个0~100的分数,如果不是0~100之间,打印分数无效,根据分数等级打印A,B,C,D,E(知识点:条件语句if elseif)
8、输入三个整数x,y,z,请把这三个数由小到大输出(知识点:条件语句)
9、有一个不多于5位的正整数,求它是几位数,分别打印出每一位数字。(知识点:条件语句)
1、假设某员工今年的年薪是30000元,年薪的年增长率6%。编写一个Java应用程序计算该员工10年后的年薪,并统计未来10年(从今年算起)总收入。(知识点:循环语句for)[选做题]
2、猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。(知识点:循环语句 while)[选做题]
3、编写一个程序,计算邮局汇款的汇费。如果汇款金额小于100元,汇费为一元,如果金额在100元与5000元之间,按1%收取汇费,如果金额大于5000元,汇费为50元。汇款金额由命令行输入。(知识点:条件语句) [选做题]
4、分别使用for循环,while循环,do循环求1到100之间所有能被3整除的整数的和。(知识点:循环语句) [选做题]
6、编写一个程序,求整数n的阶乘,例如5的阶乘是1*2*3*4*5 [选做题]
7、编写一个程序,找出大于200的最小的质数[选做题]
8、由命令行输入一个4位整数,求将该数反转以后的数,如原数为1234,反转后的数位4321 [选做题]
