美文网首页
day2.5_流程控制

day2.5_流程控制

作者: OmewSPG | 来源:发表于2022-01-18 18:04 被阅读0次

    程序流程控制

    流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。
    其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:

    • 顺序结构
    • 分支结构
    • 循环结构

    顺序结构

    image.png

    分支语句 if-else

    image.png
    image.png
    注意:
    • 条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量
    • 语句块只有一条执行语句时,一对{}可以省略,但建议保留
    • if-else语句结构,根据需要可以嵌套使用
    • 当if-else结构是“多选一”时,最后的else是可选的,根据需要可以省略
    • 当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓,当多个条件是“包含”关系时,“小上大下 / 子上父下”

    例题

    编写程序
    由键盘输入三个整数分别存入变量num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。

    import java.util.Scanner;
    class Ifexam2 {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            // if——else语句可以嵌套
            System.out.println("Enter the first number please: ");
            double num1 = scan.nextDouble();
            System.out.println("Enter the second number please: ");
            double num2 = scan.nextDouble();
            System.out.println("Enter the third number please: ");
            double num3 = scan.nextDouble();
    
            // 按从小到大排序
            // 插值法
            if(num1 > num2){
                if(num3 > num1){
                    System.out.println(num2 +","+ num1 +","+ num3);
                }else if(num3 < num2){
                    System.out.println(num3 +","+ num2 +","+ num1);
                }else{
                    System.out.println(num2 +","+ num3 +","+ num1);
                }
            }else{
                if(num3 > num2){
                    System.out.println(num1 +","+ num2 +","+ num3);
                }else if(num3 < num1){
                    System.out.println(num3 +","+ num1 +","+ num2);
                }else{
                    System.out.println(num1 +","+ num3 +","+ num2);
                }
            }
    
        }
    }
    
    

    博彩游戏
    假设你想开发一个玩彩票的游戏,程序随机地产生一个两位数的彩票,提示用户输入
    一个两位数,然后按照下面的规则判定用户是否能赢。

    1. 如果用户输入的数匹配彩票的实际顺序,奖金10 000美元。
    2. 如果用户输入的所有数字匹配彩票的所有数字,但顺序不一致,奖金 3 000美元。
    3. 如果用户输入的一个数字仅满足顺序情况下匹配彩票的一个数字,奖金1 000美元。
    4. 如果用户输入的一个数字仅满足非顺序情况下匹配彩票的一个数字,奖金500美元。
    5. 如果用户输入的数字没有匹配任何一个数字,则彩票作废。
    import java.util.Scanner;
    class Gambol {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            int num = (int)(Math.random() * 90 + 10);
    
            int num1 = num / 10;
            int num2 = num % 10;
    
            System.out.print("Enter your number please:  ");
            int mynum = scan.nextInt();
            int mynum1 = mynum / 10;
            int mynum2 = mynum % 10;
    
            if(mynum == num){
                System.out.println("you got 10000$ !!!");
            }else if(mynum1 == num2 && mynum2 == num1){
                System.out.println("you got 3000$!");
            }else if(mynum1 == num1 || mynum2 == num2){
                System.out.println("you got 1000$!");   
            }else if(mynum1 == num2 || mynum2 == num1){
                System.out.println("you got 500$");
            }else{
                System.out.println("Sorry you got no prize..");
            }
    
            System.out.println("the real number is : " + num);
        }
    }
    
    

    分支语句 switch-case

    image.png

    举个例子

    /*
    switch--case 结构
    
    注意:switch会按条件顺序比对执行,除非遇到break,否则会依次执行所有语句
    */
    class SwitchTest{
        public static void main(String[] args) {
            int num = 2;
            switch(num){
            case 0:
                System.out.println("zero");
                break;
            case 1:
                System.out.println("one");
                break;
            case 2:
                System.out.println("two");
                break;
            case 3:
                System.out.println("three");
                break;
            default:
                System.out.println("...");
            }
        }
    }
    
    

    注意

    • switch(表达式)中表达式的值必须是下述几种类型之一:byte,short,char,int,枚举 (jdk 5.0),String (jdk 7.0);
    • case子句中的值必须是常量,不能是变量名或不确定的表达式值;
    • 同一个switch语句,所有case子句中的常量值互不相同;
    • break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾
    • default子句是可任选的。同时,位置也是灵活的。当没有匹配的case时,执行default

    例题

    根据用于指定月份,打印该月份所属的季节。
    3,4,5 春季
    6,7,8 夏季
    9,10,11 秋季
    12,1,2 冬季

    import java.util.Scanner;
    class Season {
        public static void main(String[] args){
            System.out.print("Please enter your month:  ");
            Scanner scan = new Scanner(System.in);
            int month = scan.nextInt();
    
            switch(month)
            {
            case 3:
            case 4:
            case 5:
                System.out.println("Spring");
                break;
    
            case 6:
            case 7:
            case 8:
                System.out.println("Summer");
                break;
    
            case 9:
            case 10:
            case 11:
                System.out.println("Autumn");
                break;
    
            case 12:
            case 1:
            case 2:
                System.out.println("Winter");
                break;
    
            }
        }
    }
    
    

    编写程序
    从键盘上输入2019年的“month”和“day”,要求通过程序输出输入的日期为2019年的第几天。

    import java.util.Scanner;
    class  Noname2{
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
    
            System.out.print("Enter the month please...");
            int month = scan.nextInt();
            System.out.print("Enter the date please...");
            int date = scan.nextInt();
    
            int day = 0;
    
            switch(month)
            {   
                case 12:
                    day += 30;
                case 11:
                    day += 31;
                case 10:
                    day += 30;
                case 9:
                    day += 31;
                case 8:
                    day += 31;
                case 7:
                    day += 30;
                case 6:
                    day += 31;
                case 5:
                    day += 30;
                case 4:
                    day += 31;
                case 3:
                    day += 28;
                case 2:
                    day += 31;
                case 1:
                    day += 0;
            }
    
            day += date;
            System.out.println("the number of day is: " + day);
        }
    }
    

    循环语句 for

    image.png

    例题

    输出所有的水仙花数
    所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身。
    例如: 153 = 111 + 333 + 555

    class FlowerNumber {
        public static void main(String[] args) {
            for(int i = 100; i < 1000; i++){
                /*  
                    int num = 255;
                    System.out.println("这个数的是:" + num);
                    System.out.println("这个数的个位是:" + (num % 100 % 10));
                    System.out.println("这个数的十位是:" + (num % 100 / 10));
                    System.out.println("这个数的百位是:" + (num / 100));
                */
                int i1 = i / 100;
                int i2 = i % 100 / 10;
                int i3 = i % 100 % 10;
                if(i1 * i1 * i1 + i2 * i2 * i2 + i3 * i3 * i3 == i){
                    System.out.println(i);
                }
    
            }
        }
    }
    

    编写程序
    打印出九九乘法表与正、倒三角形

    class nn99 {
        public static void main(String[] args) {
                    // 九九乘法表
            for (int i = 1 ;i <= 9 ;i++ ){
                for(int j = 1; j <= i; j++){
                    System.out.print(j + " x " + i + " = " + (i * j));
                    System.out.print("  ");
                }
                System.out.print("\n");
            };
    
            System.out.println("");
            System.out.println("");
            System.out.println("");
    
                    // 正三角形
            for (int i = 1 ;i <= 9 ;i++ ){
                for(int j = 1; j <= i; j++){
                    System.out.print("★");
                    System.out.print("  ");
                }
                System.out.print("\n");
            };
    
            System.out.println("");
            System.out.println("");
            System.out.println("");
    
                    // 倒三角形
            for (int i = 9 ;i >= 1 ;i-- ){
                for(int j = 1; j <= i; j++){
                    System.out.print("★");
                    System.out.print("  ");
                }
                System.out.print("\n");
            };
        }
    }
    

    打印结果:


    image.png

    编写程序
    输出一百以内的所有质数
    方法一:

    class PrimeNumber {
        public static void main(String[] args) {
            boolean flag = true;
            for(int i = 2; i < 100; i++){
                for(int j = 2; j < Math.sqrt(i); j++){
                    if(i % j == 0){
                        flag = false;
                        break;
                    }
                }
                if(flag == true){
                    System.out.println(i);
                }
                flag = true;   // flag 必须要重置
            }
        }
    }
    

    方法二:

    class PrimeNumber2 {
        public static void main(String[] args) {
            label:for(int i = 2; i < 100; i++){
                for(int j = 2; j < Math.sqrt(i); j++){
                    if(i % j == 0){
                        continue label;  // 跳出指定标签循环
                    }
                }
                System.out.println(i);
            }
        }
    }
    

    循环语句 while

    image.png image.png

    循环语句 do-while

    image.png image.png

    break和continue

    image.png image.png image.png image.png

    相关文章

      网友评论

          本文标题:day2.5_流程控制

          本文链接:https://www.haomeiwen.com/subject/mswkhrtx.html