java--流程控制

一.流程控制

控制流程(也称为流程控制)是计算机运算领域的用语,意指在程序运行时,个别的指令(或是陈述、子程序)运行或求值的顺序。不论是在声明式编程语言或是函数编程语言中,都有类似的概念。
在声明式的编程语言中,流程控制指令是指会改变程序运行顺序的指令,可能是运行不同位置的指令,或是在二段(或多段)程序中选择一个运行。
java中的流程控制分为:顺序结构,选择结构,循环结构

二.顺序结构

程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。

package com.itheima_01;

/*
 * 顺序结构:从上往下,依次执行
 */
public class OrderDemo {
    public static void main(String[] args) {
        System.out.println("开始");
        System.out.println("语句A");
        System.out.println("语句B");
        System.out.println("语句C");
        System.out.println("结束");
    }
}

三.选择结构

选择结构
  也被称为分支结构
选择结构有特定的语法格式,我们必须按照它的基本格式来编写代码。
Java语言提供了两种选择结构语句
  if语句
  switch语句

1.if语句

/*
if语句有三种格式
    1.if语句第一种格式:
        if(关系表达式) {
                     语句体
            }
        执行流程
            首先判断关系表达式看其结果是true还是false
            如果是true就执行语句体
            如果是false就不执行语句体

    2.if语句第二种格式:
        if(关系表达式) {
                     语句体1;
            }else {
                     语句体2;
            }
        执行流程
            首先判断关系表达式看其结果是true还是false
            如果是true就执行语句体1
            如果是false就执行语句体2


    3.if语句第三种格式:
        if(关系表达式1) {
                     语句体1;
            }else  if (关系表达式2) {
                     语句体2;
            }
            …
            else {
                     语句体n+1;
            }
        执行流程
            首先判断关系表达式1看其结果是true还是false
            如果是true就执行语句体1
            如果是false就继续判断关系表达式2看其结果是true还是false
            如果是true就执行语句体2
            如果是false就继续判断关系表达式…看其结果是true还是false
            …
            如果没有任何关系表达式为true,就执行语句体n+1。

*/

示例代码:

package com.company;

import java.util.Scanner;

/*
*   键盘录入两个数据,获取这两个数据的较大值
    键盘录入学生考试成绩,请根据成绩判断该学生属于哪个级别
90-100    优秀
80-90    好
70-80    良
60-70    及格
60以下    不及格
*/
public class IfTest {
    public static void main(String[] args){
        //1.新建立一个键盘录入的对象
        Scanner sc = new Scanner(System.in);

        // 2.接收数据
//        while (true){ 加上这个可以循环使用
            System.out.println("请输入学生的成绩:");
            int score = sc.nextInt();
            if(score>=90 && score<100){
                System.out.println("优秀");
            }else if (score>=80 && score<90){
                System.out.println("好");
            }else if (score>=70 && score<80){
                System.out.println("良");
            }else if (score>=60 && score<70){
                System.out.println("及格");
            }else if (score<60){
                System.out.println("不及格");
            }else {
                System.out.println("输入的成绩有误");
            }
//        }


    }
}

2.switch语句

/*
switch语句格式:
1.switch(表达式) {
          case 值1:
            语句体1;
            break;
            case 值2:
            语句体2;
            break;
            …
            default:    
            语句体n+1;
            break;
    }

2.格式解释
    switch表示这是switch语句
    表达式的取值:byte,short,int,char
    JDK5以后可以是枚举
    JDK7以后可以是String
    case后面跟的是要和表达式进行比较的值
    语句体部分可以是一条或多条语句
    break表示中断,结束的意思,可以结束switch语句
    default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。

3.执行流程
    首先计算出表达式的值
    其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
    最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

*/

示例代码:

package com.company;

import java.util.Scanner;

/*
 
 * 需求:
 *         根据键盘录入的数值1,2,3,…7输出对应的星期一,星期二,星期三…星期日。
 */
public class SwitchDemo {
    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);
        
        //接收数据
        System.out.println("请输入一个数字(1-7):");
        int weekday = sc.nextInt();
        
        //switch语句实现选择
        switch(weekday) {
        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;
        }
        
        
    }
}

四.循环结构

/*
循环语句的组成
1.初始化语句:
    一条或者多条语句,这些语句完成一些初始化操作。
2.判断条件语句:
    这是一个boolean 表达式,这个表达式能决定是否执行循环体。
3.循环体语句:
    这个部分是循环体语句,也就是我们要多次做的事情。
4.控制条件语句:
    这个部分在一次循环体结束后,下一次循环判断条件执行前执行。通过用于控制循环条件中的变量,使得循环在合适的时候结束。
Java提供了三种循环结构语句:
    1.for,
    2.while,
    3.do…while
*/

1.for循环

基本格式:

/*
 * for循环语句格式:
 *         for(初始化语句;判断条件语句;控制条件语句) {
 *             循环体语句;
 *         }
 *
 *         执行流程:
 *             A:执行初始化语句
 *             B:执行判断条件语句,看结果是true还是false
 *                 如果是true,就继续执行
 *                 如果是false,就结束循环
 *             C:执行循环体语句
 *             D:执行控制条件语句
 *             E:回到B继续
 *
 *
 */

示例一:

package com.company;
/*
 * 需求:
 *         1.求100以内所有的整数和
 *
 */

public class ForDemo {
    public static void main(String[] args){
        int sum = 0;
        for(int i =1;i<=100;i++){
            if(i%2==0){
                sum+=i;
            }
        }
        System.out.println("sum:"+sum);
    }
}

示例二:

package com.company;
/*
 * 需求:在控制台输出所有的”水仙花数”
 * 
 * 分析:
 *         什么是水仙花数呢?
 *             所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
 *            举例:153就是一个水仙花数。
 *            153 = 1*1*1 + 5*5*5 + 3*3*3
 *
 *        A:三位数其实就告诉了我们水仙花数的范围
 *            100-999
 *        B:如何获取一个数据的每一个位上的数呢?
 *            举例:我有一个数据153,请问如何获取到个位,十位,百位
 *            个位:153%10 = 3;
 *            十位:153/10%10 = 5;
 *            百位:153/10/10%10 = 1;
 *            千位:...
 *            万位:...
 *        C:让每个位上的立方和相加,并和该数据进行比较,如果相等,就说明该数据是水仙花数,在控制台输出
 */
public class ForDemo01 {
    public static void main(String[] args) {
        //通过循环获取到每一个三位数
        for(int x=100; x<1000; x++) {
            //获取个位,十位,百位
            int ge = x%10;
            int shi = x/10%10;
            int bai = x/10/10%10;
            
            //让每个位上的立方和相加,并和该数据进行比较,如果相等,就说明该数据是水仙花数,在控制台输出
            if((ge*ge*ge+shi*shi*shi+bai*bai*bai) == x) {
                System.out.println(x);
            }
        }
    }

示例三:

package com.company;
/*
 * 需求:统计”水仙花数”共有多少个
 * 
 * 分析:
 *         A:定义统计变量,初始化值是0
 *         B:获取三位数,用for循环实现
 *         C:获取三位数的个位,十位,百位
 *         D:判断这个三位数是否是水仙花数,如果是,统计变量++
 *         E:输出统计结果就可以了
 */
public class ForDemo02 {
    public static void main(String[] args) {
        //定义统计变量,初始化值是0
        int count = 0;
        
        //获取三位数,用for循环实现
        for(int x=100; x<1000; x++) {
            //获取三位数的个位,十位,百位
            int ge = x%10;
            int shi = x/10%10;
            int bai = x/10/10%10;
            
            //判断这个三位数是否是水仙花数,如果是,统计变量++
            if((ge*ge*ge+shi*shi*shi+bai*bai*bai) == x) {
                count++;
            }
        }
        
        //输出统计结果就可以了
        System.out.println("水仙花数共有:"+count+"个");
    }
}

2.while循环

/*
while循环语句格式:
1.基本格式
   while(判断条件语句) {
         循环体语句;
   }
2.扩展格式
   初始化语句;
   while(判断条件语句) {
         循环体语句;
         控制条件语句;
    }

*/

示例一:

package com.it_01;
/*
 * 需求:
 *         1.求100以内所有的整数和
 */

public class WhileDemo {
    public static void main(String[] args){
        int i = 0;
        int sum = 0;
        while (i<=100){
            if(i%2 ==0){
                sum+=i;
            }
            i++;
        }
        System.out.println("sum:"+sum);
        
    }
}

示例二:

package com.it_01;
/*
 * 需求:在控制台输出所有的”水仙花数”以及个数
 *
 * 分析:
 *         什么是水仙花数呢?
 *             所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
 *            举例:153就是一个水仙花数。
 *            153 = 1*1*1 + 5*5*5 + 3*3*3
 *
 *        A:三位数其实就告诉了我们水仙花数的范围
 *            100-999
 *        B:如何获取一个数据的每一个位上的数呢?
 *            举例:我有一个数据153,请问如何获取到个位,十位,百位
 *            个位:153%10 = 3;
 *            十位:153/10%10 = 5;
 *            百位:153/10/10%10 = 1;
 *            千位:...
 *            万位:...
 *        C:让每个位上的立方和相加,并和该数据进行比较,如果相等,就说明该数据是水仙花数,在控制台输出
 */

public class WhileDemo02 {
    public static void main(String[] args){
        int i = 100;
        int sum = 0;
        while (i<=1000){
            int gei = i%10;
            int shi = i/10%10;
            int bai = i/100%10;
            if(gei*gei*gei+shi*shi*shi+bai*bai*bai==i){
                System.out.println(i);
                sum +=1;
            }
            i++;
        }
        System.out.println(sum);


    }
}

3.do..whlie..循环

/*
do…while循环语句格式:
1.基本格式
   do {
         循环体语句;
   }while((判断条件语句);
2.扩展格式
   初始化语句;
   do {
         循环体语句;
         控制条件语句;
    } while((判断条件语句);
*/

示例一:

package com.it_02;
/*
 * do...while循环的基本格式:
 *         do {
 *             循环体语句;
 *         }while(判断条件语句);
 * 扩展格式:
 *         初始化语句;
 *         do {
 *             循环体语句;
 *             控制条件语句;
 *         }while(判断条件语句);
 * 执行流程:
 *         A:执行初始化语句;
 *         B:执行循环体语句;
 *         C:执行控制条件语句;
 *         D:执行判断条件语句,看是true还是false
 *             如果是true,回到B继续
 *             如果是false,就结束
 *
 * 需求:
 *         求出100以内所有的整数和
 */

public class DoWhileDemo {
    public static void main(String[] args){
        int i = 1;
        int sum = 0;
        do {
            if(i%2==0){
                sum+=i;
            }
            i++;
        }while (i<=100);
        System.out.println(sum);
    }
}

示例二:

package com.it_02;
/*
 * do...while循环的基本格式:
 *         do {
 *             循环体语句;
 *         }while(判断条件语句);
 * 扩展格式:
 *         初始化语句;
 *         do {
 *             循环体语句;
 *             控制条件语句;
 *         }while(判断条件语句);
 * 执行流程:
 *         A:执行初始化语句;
 *         B:执行循环体语句;
 *         C:执行控制条件语句;
 *         D:执行判断条件语句,看是true还是false
 *             如果是true,回到B继续
 *             如果是false,就结束
 *
 * 需求:
 *
 *         统计所有的水仙花数以及各个数
 */
public class DoWhileDemo02 {
    public static void main(String[] args){
        int i = 100;
        int sum =0;
        do {
            int gei = i%10;
            int shi = i/10%10;
            int bai = i/100%10;
            if(gei*gei*gei+shi*shi*shi+bai*bai*bai==i){
                System.out.println(i);
                sum +=1;
            }
            i++;
        }while (i<=1000);
        System.out.println(sum);

    }

}

4.三种循环结构的区别

/*
1.虽然可以完成同样的功能,但是还是有小区别:
    do…while循环至少会执行一次循环体。
for循环和while循环只有在条件成立的时候才会去执行循环体
2.for循环语句和while循环语句的小区别:
    使用区别:控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,
    如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。
*/

示例代码:

package com.company;
/*
 * 三种循环的区别:
 *         A:do...while至少执行一次循环体
 *         B:for,while循环先判断条件是否成立,然后决定是否执行循环体
 *
 * for和while的小区别:
 *         for循环的初始化变量,在循环结束后,不可以被访问。而while循环的初始化变量,是可以被继续使用的。
 *         如果初始化变量,后面还要继续访问,就使用while,否则,推荐使用for。
 *
 * 循环的使用推荐:
 *         for -- while -- do...while
 */

public class Main {

    public static void main(String[] args) {
    /*
    //for循环
    for(int i =3;i>10;i++){
        System.out.println("只是for循环");
        }

    //while循环
    int a = 3;
    while(a>3){
        System.out.println("只是while循环");
    }

    //do...while...循环
    do {
        System.out.println("这是do...while..循环");
    }while (a>3);

    //上述结果为:这是do...while..循环
    */

    //2.for循环的初始化变量,在循环结束后,不可以被访问。而while循环的初始化变量,是可以被继续使用的。
        for(int x=1; x<=10; x++){
            System.out.println("爱生活,爱Java");
        }
        //这里的x无法继续访问
        //System.out.println(x);
        System.out.println("-----------------");

        int y = 1;
        while(y<=10) {
            System.out.println("爱生活,爱Java");
            y++;
        }
        System.out.println(y);

    }
}

5.跳转控制语句break和continue

break

/*
1.break的使用场景:
    在选择结构switch语句中
在循环语句中
    离开使用场景的存在是没有意义的
2.break的作用:
    跳出单层循环

*/

continue

/*
1.continue的使用场景:
    在循环语句中
    离开使用场景的存在是没有意义的
2.continue的作用:
    单层循环对比break,然后总结两个的区别
    break  退出当前循环
    continue  退出本次循环

*/

示例代码:

package com.it_03;

public class BreakAndContinue {
    public static void main(String[] args){

        for(int i =1;i<=10;i++){
            if(i==3){
                break;
            }
            System.out.println("这是break");

        }
        System.out.println("--------------");
        for(int i =1;i<=10;i++){
            if(i==3){
                continue;
            }
            System.out.println("这是continue");
        }

    }

}
posted @ 2018-09-03 14:46  明-少  阅读(187)  评论(0)    收藏  举报