Skip to content

9. 流程控制语句

在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说程序的流程对运行结果有直接的影响。在清楚每条语句的执行流程的前提下,才能通过控制语句的执行顺序来实现我们要完成的功能。

9.1 条件语句

在Java代码块中,程序默认是顺序结构: 编写的程序语句按照顺序依次被执行。

如果要某条代码在满足条件下才执行?

if条件语句主要用于告知程序当某一个条件成立时,须执行满足该条件的相关语句。

9.1.1 if语句 (单一条件)

如果表达式值为true,则执行花括号的内容后,再执行后面的语句 如果表达的值为false,则直接执行后面的语句

9.1.2 if...else语句(二选一)

if...else语句作用:针对某种条件有选择地做出处理 如果布尔表达式的值为true,则执行语句1 如果布尔表达式的值为false,则执行语句2

2020-11-13_115755

9.1.3 if...else if条件语句

如果满足某一个条件,就采用与该条件对应的处理方式;如果满足另一个条件,则采用与另一个条件对应的处理方法。

2020-11-13_115811

java
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 练习

  1. 编写java程序,完成以下功能:假设有整型变量x,判断x是否为偶数,若为偶数,则在控制台上打印“输入的数值是偶数”。无论x是否为偶数,最后都要在控制台上输出x的值
  2. 有一个数字为45327,判断该数字是否能被13整除,是否能被17整除
  3. 有两个整型变量x,y,请编写代码在控制台上输出x与y中值较大的那个数。
  4. 判断2064年是不是闰年。

闰年判断规则: 能被400整除的是闰年 能被100整除,不能被400整除的不是闰年 能被4整除,不能被100整除的是闰年 其他的不是闰年

java
/*
 * 项目: 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条件语句

  1. switch语句特点:

    表达式的值只可以接受int、byte、char、short 、String型,不接受其他类型的值 表达式的值接受String类型只在JDK7及以后版本有效 switch case中的值必须要与switch表达式的值具有相同的数据类型。而且case后跟的值必须是常量,不能跟变量。

  2. 不允许有重复的case取值 switch一旦碰到第一次case匹配,程序就会跳转到这个标签位置,开始顺序执行以后所有的程序代码,而不管后面的case条件是否匹配,直到碰到break关键字或者结束switch语句的大括号为止

    case之间与default没有顺序。先判断所有的case,没有匹配的case执行default。因此一般将default放在case后面。 switch语句停止的条件是遇到了break关键字或者结束switch语句的大括号。

2020-11-13_115827

语法格式如下:

java
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+

java
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

2020-11-13_115839

9.2.2 do{...}while();

2020-11-13_115859

9.2.3 循环语句实现

java
/**
 * 项目: 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.流程控制进阶

  1. 嵌套

    在Java语言中,流程控制语句可以嵌套使用

    嵌套循环语句

    嵌套条件语句

    循环、条件语句嵌套使用

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 变量的作用域

  1. 死循环

    靠自身控制无法终止的程序称为“死循环”

  2. 流程中断

    在使用循环语句时,只有循环条件表达式的值为false时,才能结束循环。有时,我们想提前中断循环,要实现这一点,只需要在循环语句块中添加break或continue语句:

    java
            for (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();
            }
    java
    for (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 课后练习

java
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 [选做题]

Released under the MIT License.