控制流程语句

一、条件语句

1)if语句

1、单分支语句

if(布尔表达式){
  执行语句;
}

2、双分支语句

if(布尔表达式){
  执行语句;
}else{
  执行语句;
}

  示例:猜测硬币的正反面

/*
 * 需求:猜测硬币的正反面
 * 
 * 0为正面
 * 1为反面
 * 
 * */
package edu.practice_1025;
import java.util.Scanner;
public class Work6 {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("一起来猜猜硬币的正反面,正面(0) or 反面(1)??");
        int number = (int)(System.currentTimeMillis() % 2);
        System.out.println("请输入你的猜想:");
        int i = input.nextInt();
        if (number == i) {
            System.out.println("恭喜你,猜对了!");
        }
        else {
            System.out.println("不好意思,你猜错了!");
        }
        input.close();
        System.out.println("生成的随机数:" + number );
    }

}

 3、多分支if-else语句

if(布尔表达式1){
  执行语句;
}else if(布尔表达式2){
  执行语句;
..... }else{   执行语句; }

4、嵌套if语句

/*
 * 需求:根据输入的成绩打印出对应的等级
 * 
 * 分析:
 * 1、输入成绩
 * 2、判断成绩等级
 * 法一:if-elseif语句
 * 法二:嵌套的if-else语句
 * 
 * */
package edu.practice_1025;

import java.util.Scanner;

public class Work8 {

    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        //输入成绩
        System.out.println("请输入成绩:");
        double score = input.nextDouble();
        
        //法一:if-elseif语句
        if (score>=90&&score<=100) {
            System.out.println("优秀");
        }
        else if (score>=80) {
            System.out.println("良好");
        }
        else if (score>=70) {
            System.out.println("中等");
        }
        else if (score>=60) {
            System.out.println("及格");
        }
        else {
            System.out.println("不及格");
        }
        input.close();
        
        
        //法二:嵌套的if-else语句
        if (score>=90) {
            System.out.println("优秀");
        } else {
            if (score>=80) {
                System.out.println("良好");
            } else {
                if (score>=70) {
                    System.out.println("中等");
                } else {
                    if (score>=60) {
                        System.out.println("及格");
                    } else {
                        System.out.println("不及格");
                    }
                }
            }
        }
    }

}

2)switch-case语句

语法结构1:
switch(switch表达式){
case 值1:
    语句组1;
case 值2:
    语句组2;
case 值3:
    语句组3;
.....
default:
    默认语句组;
}

从jdk14开始,对switch进行了更新 语法结构2: switch(switch表达式){ case 值1 -> 语句组1; case 值2 -> 语句组2; ..... default -> 默认语句组; }

 示例:根据月份显示对应的英文月份名

/*
 * 需求:随机产生 1和12之间整数的程序,
 * 并且根据数字1,2,3…12,
 * 显示相应的英文月份:January,February,…December。
 * 
 * 分析:
 * 1、生成1-12之间的随机数 
 * 2、利用case条件语句
 * 3、显示对应的英文月份
 * */
package edu.practice_1025;

public class Work2 {
    public static void main(String[] args) {
        int number = (int)(System.currentTimeMillis() % 12);
        System.out.println("生成的随机数为:" + number);
        
        switch (number) {
            case 1:
                System.out.println( number + "月:January");
                break;
            case 2:
                System.out.println( number + "月:February");
                break;
            case 3:
                System.out.println( number + "月:March");
                break;
            case 4:
                System.out.println( number + "月:April");
                break;
            case 5:
                System.out.println( number + "月:May");
                break;
            case 6:
                System.out.println( number + "月:June");
                break;
            case 7:
                System.out.println( number + "月:July");
                break;
            case 8:
                System.out.println( number + "月:August");
                break;
            case 9:
                System.out.println( number + "月:September");
                break;
            case 10:
                System.out.println( number + "月:October");
                break;
            case 11:
                System.out.println( number + "月:November");
                break;
            case 0:
                System.out.println( number + 12 + "月:December");
                break;

        }
    }
}

3)嵌套条件

/*
 * 提示用户输入一个年份和月份,然后显示这个月的天数。
 * 
 * 分析:
 * 1、输入一个年份
 * 2、输入一个月份
 * 3、判断天数
 * ①1,3,5,7,8,10,12  31天
 * ②4,6,9,11 30天
 * ③2 闰年为29 不是闰年为28天
 * 4、输出结果:****年*月有**天
 * 
 * */

package edu.practice_1025;

import java.util.Scanner;

public class Work4 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("请输入年份:");
        int year = in.nextInt();
        System.out.println("请输入月份:");
        int month = in.nextInt();
        in.close();
        int day;
        
        //if-elseif语句
        
//        if (month == 1 || month ==3 || month ==5 || month ==7 || month ==8 || month ==10 || month ==12){
//            day = 31;
//        } else if (month != 2){
//            day = 30;
//        }else {
//            if (year%400==0 || (year % 4 == 0 && year % 100 != 0)) {
//                day = 29;
//            }else {
//                day = 28;
//            }
//        }
        
        //switch-case语句
        
        switch (month) {
        case 1,3,5,7,8,10,12 -> day = 31;
        case 4,6,9,11 -> day = 30;
        case 2 -> {
                if (year%400==0 || (year % 4 == 0 && year % 100 != 0)) {
                    day = 29;
                }else {
                    day = 28;
                }
                }
        default -> day = 0;
                };
        
        System.out.println(year + "年" + month + "月有" + day +"天。");
        
    }
}

二、循环语句

1)while语句

①初始化部分:只做一次初始化

while(②循环条件部分){ //条件为true,进入循环

       ③循环体部分

       ④迭代部分:当循环体部分执行一次以后,执行迭代部分
}

 示例:

/*
 * 需求:养老无忧计划
 * 描述:以目前的生活水平想要无忧养老需要存够600万养老金,假设你每年可以存N万,年利率为3%,问需要做牛做马多少年?
 * 
 * 分析:
 * 第一年:N
 * 第二年:N*(1+3%)+N
 * 
 * 设计:
 * 1、常年DEPOSIT = 600 ,每年定存 N
 * 2、年数:year
 *    总金:total_money
 * 3、while 循环
 * 4、 total_money=total_money*(1+0.03)+N
 * 5、每次循环,year+1
 * 6、输出结果:每年存%d万,存到%d万需要%d年
 *    
 * */

package edu.practice_1027;

public class Work11 {
    public static void main(String[] args) {
        final int DEPOSIT = 600;
        final int N = 10;
        int year = 0;
        double total_money = 0;
        while(total_money < DEPOSIT ) {
            total_money=total_money *(1+0.03)+N;
            year++;
        }
        System.out.printf("每年存%d万,存到%d万需要%d年",N,DEPOSIT,year);
        
    }
}

2)do-while 语句

语法结构:
 do{
  循环体;
  迭代部分; }while(条件语句)
public class DoWhileDemo {
    public static void main(String[] args) {
        int sum = 0;
        int num;
        Scanner input = new Scanner(System.in);
        do {
            num = input.nextInt();
            sum += num;
        }while(num != 0);
        System.out.println(sum);
        input.close();
    }
}

3)for 语句

for (初始化部分;循环条件;迭代部分){
    循环体;
}

 示例:打印图形

package edu.practice_1027;

public class Work19 {
    public static void main(String[] args) {
        System.out.println("图形一");
        for(int i = 1 ; i <= 6 ; i++) {
            for(int j = 1 ; j <= i ; j++) {
                System.out.print(j+"\t");
            }
            System.out.println();
        }

        
        System.out.println("图形二");
        for(int i = 6 ; i >= 1 ; i--) {
            for(int j = 1 ; j <= i ; j++) {
                System.out.print(j+"\t");
            }
            System.out.println();
        }


        System.out.println("图形三");
        for(int i = 1 ; i <= 6 ; i++) {
            for(int j = 5 ; j >= i ; j--) {
                System.out.print("\t");
            }
            for(int j = i;j>= 1 ;j--) {
                System.out.print(j + "\t");
            }
            System.out.println();
        }

        System.out.println("图形四");
        for(int i = 6 ; i >= 1 ; i--) {
            for(int j = 5 ; j >= i ; j--) {
                System.out.print("\t");
            }
            for(int j = 1 ; j <= i ; j++) {
                System.out.print(j+"\t");
            }
            System.out.println();
        }        


        System.out.println("图形五");
        for(int i = 1 ; i <= 6 ; i++) {
            for(int j = 5 ; j >= i ; j--) {
                System.out.print("\t");
            }
            for(int j = i;j>= 1 ;j--) {
                System.out.print(j + "\t");
            }
            for(int j = 2 ; j <= i ; j++) {
                System.out.print(j+"\t");
            }
            System.out.println();
        }

        System.out.println("图形六");
        for(int i = 1; i<=6;i++) {
            for(int j =5 ;j>=i;j--) {
                System.out.print("\t");
            }
            for(int j = 0;j<=i-1 ;j++ ) {
                System.out.print(Math.pow(2,j) + "\t");
            }
            for(int j = i-2 ; j >= 0;j--) {
                System.out.print(Math.pow(2, j)+"\t");
            }
            System.out.println();   
        }
    }
}

4)嵌套循环

  外层循环

  内层循环

三、break、continue 、return使用

 break:结束(跳出)当前循环,不再进入下一次循环。注意:“当前”指的是break所在的循环。

continue:跳过所在(指定)循环的当次循环,进入下一次循环。

return:用在循环里,会终止循环,并且结束return所在的方法。因此后面的语句不执行。

示例1:显示素数

/*
 *需求:打印2到10000的所有素数,每行显示8个素数
 *
 *分析:
 *素数:只能被1和本身整除的数
 *嵌套循环
 *
 */

package edu.practice_1027;

public class Work7PrimeNumber {

    public static void main(String[] args) {
        int i,j;  
        int c=0;     
        for(i=2;i<=10000;i++) {  
            for( j=2;j<i;j++) {
                if (i%j==0) //如被整除跳出循环
                    break;
            }
            if (j>=i) {
                System.out.print(" "+i+"\t");    
                c++; 
                //每行显示八个数
                if (c==8) {           
                    System.out.println();
                    c=0;
                }
            }
          }
    }
}

示例2:输入两个正整数m和n,求其最大公约数和最小公倍数

/*
 * 需求:输入两个正整数m和n,求其最大公约数和最小公倍数
 * 
 * 分析:
 * 1、请输入两个正整数 m 、n
 * 2、保证 m> n
 * 3、若m是n的倍数,则n为最大公约数,m为最小公倍数
 * 4、若不是进一步判断最大公约数
 * 5、最小公倍数=两数乘积/最大公约数
 * 
 */
package edu.practice_1027;

import java.util.Scanner;

public class Work4 {

    public static void main(String[] args) {
        System.out.println("请输入两个整数:");
        Scanner in = new Scanner(System.in);
        int m = in.nextInt();
        int n = in.nextInt();
        in.close();
        
        //初始化最大公约数、最小公倍数
        int gcd = 1;
        int lcm = 1;
        
        //保证m > n
        if(m < n) {
            int temp = n;
            n = m;
            m = temp;
        }
        //若m是n的倍数,则n为最大公约数,m为最小公倍数
        if(m % n == 0) {
            gcd = n;
            lcm = m;
            System.out.printf("(%d,%d)的最大公约数:%d,最小公倍数:%d",n,m,gcd,lcm);
            return;
        }
        
        //进一步判断最大公约数
        for (int k = 2;k <= n && k <= m ; k++ ) {
            if(n % k == 0 && m % k == 0)
                gcd = k;
        }
        //最小公倍数
        lcm = n * m /gcd;
        
        System.out.printf("(%d,%d)的最大公约数:%d,最小公倍数:%d",n,m,gcd,lcm);
    }

}

 

posted on 2023-11-07 22:28  L0ngyc  阅读(28)  评论(0)    收藏  举报