第四章、 程序控制结构

第四章、 程序控制结构

  • 程序流程控制介绍

在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的,主要有三大流程控制语句。

  1. 顺序控制
  2. 分支控制
  3. 循环控制

4.1 顺序控制

  • 顺序控制介绍

程序从上到上逐行地执行,中间没有任何判断和跳转。
在这里插入图片描述

4.2 分支控制(if else switch)

分支结构有三种:

  1. 单分支
  2. 双分支
  3. 多分支

(1)if语法:

if (condition) {
    // 当条件为真时执行的代码块
} else {
    // 当条件为假时执行的代码块
}

其中,condition 是一个布尔表达式,当条件为真时执行 if 代码块,否则执行 else 代码块。

  • 使用:要求输入两个整数,输出其最大值
package chapter4;

import java.util.Scanner;

public class Test1 {
    //if-else的使用
    public static void main(String args[]){
        Scanner scanner=new Scanner(System.in);
        int c1=scanner.nextInt();
        int c2=scanner.nextInt();
        if(c1>c2){
            System.out.print("最大的是:"+c1);
        }else{
            System.out.print("最大的是:"+c2);
        }
    }
    }

(2) if-else if-else 语法:

if (condition1) {
    // 当条件1为真时执行的代码块
} else if (condition2) {
    // 当条件2为真时执行的代码块
} else {
    // 当条件1和条件2都为假时执行的默认代码块
}

可以有多个 else if 块,按顺序判断条件并执行符合条件的代码块,如果所有条件都为假,则执行默认的 else 代码块。

  • 使用:输入一个整数,判断它与0的关系。
package chapter4;

import java.util.Scanner;

public class Test2 {
    public static void main(String args[]){
        //if-else if-……-else的使用
        Scanner scanner=new Scanner(System.in);
        int a=scanner.nextInt();
        if(a>0){
            System.out.print("a大于0");
        }else if(a==0){
            System.out.print("a等于0");
        }else{
            System.out.print("a小于0");
        }

    }
}

(3) switch语法:

switch (expression) {
    case value1:
        // 当 expression 的值等于 value1 时执行的代码块
        break;
    case value2:
        // 当 expression 的值等于 value2 时执行的代码块
        break;
    default:
        // 当 expression 的值与所有 case 不匹配时执行的默认代码块
        break;
}

根据 expression 的值选择执行对应的 case 块,如果没有匹配的 case,则执行默认的 default 代码块。

  • 使用:输入1-7,输出星期几。
package chapter4;

import java.util.Scanner;

public class Test3 {
    public static void main(String args[]){
        //switch的使用
        Scanner scanner=new Scanner(System.in);
        int weekday=scanner.nextInt();
        switch (weekday){
            case 1:
                System.out.print("今天星期一");
                break;
            case 2:
                System.out.print("今天星期二");
                break;
            case 3:
                System.out.print("今天星期三");
                break;
            case 4:
                System.out.print("今天星期四");
                break;
            case 5:
                System.out.print("今天星期五");
                break;
            case 6:
                System.out.print("今天星期六");
                break;
            case 7:
                System.out.print("今天星期天");
                break;
            default:
                System.out.print("请输入1-7的数字!");
                break;

(4) 三元运算符:

result = (condition) ? value1 : value2;

如果 condition 成立,则返回 value1,否则返回 value2。

  • 使用:输入两个整数,判断最小值。
package chapter4;

import java.util.Scanner;

public class Test4 {
    public static void main(String args[]){
        //三元换元符的使用
        Scanner scanner = new Scanner(System.in);
        int m1=scanner.nextInt();
        int m2=scanner.nextInt();
        String result = (m1>m2)?"最小值:"+m2:"最小值:"+m1;
        System.out.print(result);
    }
}

4.3 循环控制(for ,while ,do while,多重循环)

  1. while循环:
while (condition) {
    // 当条件为真时执行的代码块
}

只要 condition 的值为真,就会不断执行循环体中的代码块。

  • 使用:输出n个平方值
package chapter4;

import java.util.Scanner;

public class Test5 {
    public static void main(String args[]){
        Scanner scanner =new Scanner(System.in);
        int square=scanner.nextInt();
        int i=1;
        while(i<=square){
            System.out.println(i*i);
            i++;
        }
    }
}

  1. do-while循环:
do {
    // 执行至少一次的代码块
} while (condition);

先执行一次循环体中的代码块,然后判断 condition 是否为真,如果为真则继续执行循环体中的代码块,否则退出循环。

  • 使用:打印0到9
package chapter4;

public class Test6 {
    public static void main(String args[]){
        int i=0;
        do{
            System.out.println(i);
            i++;
        }while(i<10);
    }
}

  1. for循环:
for (initialization; condition; update) {
    // 每次循环执行的代码块
}

initialization 用于初始化循环变量;condition 为循环条件,只要满足条件就继续执行循环体中的代码块;update 用于更新循环变量的值,每次循环结束时执行。

  • 使用:打印九九乘法表
package chapter4;

public class Test7 {
    public static void main(String args[]){
        for(int i=1;i<10;i++){
            for(int j=1;j<=i;j++){
                System.out.printf("%d×%d=%d\t",j,i,i*j);
            }
            System.out.println();
        }
    }
}

  1. 增强for循环(foreach循环):
for (type element : array) {
    // 针对数组每个元素执行的代码块
}

遍历数组中的所有元素,对于数组中的每个元素,执行循环体中的代码块。

  • 使用:遍历数组
package chapter4;

public class Test8 {
    public static void main(String args[]){
        int[] numbers={1,2,3,4,5};
        for(int num:numbers){
            System.out.println("当前的数字是:"+num);
        }
    }
}

4.4 break

break语句:

while (condition) {
    // 循环体中的代码块
    if (break_condition) {
        break;
    }
}

终止循环,跳出当前循环体。

  • 使用:输出数组,当遇到3就停止输出
package chapter4;

public class Test8 {
    public static void main(String args[]){
        int[] numbers={1,2,3,4,5};
        for(int num:numbers){
            if(num==3){
                break;
            }
            System.out.println("当前的数字是:"+num);

        }
    }
}

4.5 continue

continue语句:

for (type element : array) {
    if (continue_condition) {
        continue;
    }
    // 针对数组中非 continue_condition 元素执行的代码块
}

跳过循环体中符合条件的代码,执行下一次循环。

  • 使用:输出数组,但不输出3,其他都输出。
package chapter4;

public class Test8 {
    public static void main(String args[]){
        int[] numbers={1,2,3,4,5};
        for(int num:numbers){
            if(num==3){
                continue;
            }
            System.out.println("当前的数字是:"+num);

        }
    }
}

4.6 return

return 关键字用于结束当前方法的执行,并返回一个值(可选)。以下是 return 关键字的使用示例:

  1. 无返回值的方法:
public void printMessage() {
    System.out.println("Hello, World!");
    return; // 结束方法的执行
}

调用 printMessage() 方法时,会打印 “Hello, World!”,然后方法执行结束。

  1. 有返回值的方法:
public int addNumbers(int a, int b) {
    int sum = a + b;
    return sum; // 返回计算结果
}

调用 addNumbers(2, 3) 方法时,会返回 5。

  1. 使用 return 提前结束循环:
public int findFirstEvenNumber(int[] numbers) {
    for (int num : numbers) {
        if (num % 2 == 0) {
            return num; // 找到第一个偶数并返回
        }
    }
    return -1; // 如果没有找到偶数,则返回 -1
}

调用 findFirstEvenNumber(new int[]{1, 3, 4, 7, 8}) 方法时,会返回 4,因为它是数组中的第一个偶数。

return 关键字可以根据需要在方法中的任何位置使用,用于提前结束方法的执行,并返回相应的值。注意,在某些情况下,return 后面的代码可能不会被执行到,因此需要仔细考虑方法的逻辑和返回值的正确性。

4.7 本章练习

  1. 输入分数,判断分数的等级,100分为满分,大于80分是优秀,大于60分不及格,否则就是不及格。
package chapter4;

import java.util.Scanner;

public class Test9 {
    public static void main(String args[]){
        //if-else if-else多分支的使用
        Scanner scanner=new Scanner(System.in);
        int grade=scanner.nextInt();
        if(grade==100){
            System.out.print("满分");
        }else if(grade>=80){
            System.out.print("优秀");
        }else if(grade>=60){
            System.out.print("及格");
        }else{
            System.out.print("不及格");
        }
    }

}

  1. 若输入一个小写字母,输出其大写字母,否则输出other。
package chapter4;

import java.util.Scanner;

public class Test10 {
    public static void main(String args[]){
        Scanner scanner=new Scanner(System.in);
        String letter=scanner.next();
        if(letter.length()!=1){
            System.out.print("other");
        }else{
            char lower=letter.charAt(0);
            if(lower>='a' && lower<='z'){
                //A65,Z90,a97,z122
                char upper=(char)(lower-32);
                System.out.print("小写字母:"+lower+"的大写字母:"+upper);
            }else{
                System.out.print("other");
            }
        }

    }
}

  1. 对学生成绩大于60分,输出及格,低于60分,输出不及格(输出的成绩不能大于100)
package chapter4;

import java.util.Scanner;

public class Test11 {
    public static void main(String args[]){
        Scanner scanner=new Scanner(System.in);
        int grade=scanner.nextInt();
        int pass=grade/60;
        //使用switch来判断成绩是否及格,满分是120,grade/60
        switch (pass){
            case 2:
                System.out.print("分数满分");
                break;
            case 1:
                System.out.print("分数及格");
                break;
            case 0:
                System.out.print("分数不及格");
                break;
            default:
                System.out.print("请输入的数");
                break;
        }
    }
}

  1. 输入整数1-12,判断打印该月份所属 的季节。3、4、5是春季;6、7、8是夏季;9、10、11是秋季;12、1、2是冬季。
package chapter4;

import java.util.Scanner;

public class Test12 {
    public static void main(String args[]){
        Scanner scanner=new Scanner(System.in);
        int month=scanner.nextInt();
        switch(month){
            case 3:
            case 4:
            case 5:
                System.out.print("春季");
                break;
            case 6:
            case 7:
            case 8:
                System.out.print("夏季");
                break;
            case 9:
            case 10:
            case 11:
                System.out.print("秋季");
                break;
            case 12:
            case 1:
            case 2:
                System.out.print("冬季");
                break;
            default:
                System.out.print("请输入1-12");
                break;
        }
    }
}

  1. 打印1-100,使用do…while
package chapter4;

public class Test13 {
    public static void main(String args[]){
        //打印1-100,使用do..while
        int i=1;
        do{
            System.out.print(i+" ");
            i++;
            if(i==51){
                System.out.println();
            }
        }while(i<=100);
    }
}

  1. 计算1-100的和
package chapter4;

public class Test14 {
    public static void main(String args[]){
        //计算1-100的和
        int sum=0;
        for(int i=1;i<=100;i++){
            sum+=i;
        }
        System.out.print(sum);
    }
}

  1. 计算1-200之间能被5整除但不能被3整除的个数
package chapter4;

public class Test15 {
    public static void main(String args[]){
        int i=5;
        do{
            if(i%3!=0 && i%5==0){
                System.out.print(i+" ");
            }
            i++;
        }while(i<=200);
    }
}

  1. 实现猜数字功能
package chapter4;

import java.util.Random;
import java.util.Scanner;

public class Test16 {
    public static void main(String args[]){
        //猜数字
        Scanner scanner=new Scanner(System.in);
        Random random=new Random();
        int number=random.nextInt(100)+1;
        int c;
        do{
            c=scanner.nextInt();
            if(c==number){
                System.out.println("恭喜你猜对啦!"+c);
            }else if(c<number){
                System.out.println("猜小啦,再猜一次");
            }else{
                System.out.println("猜大啦,再猜一次");
            }
        }while(c!=number);
    }
}

  1. 打印指定高度的三角形
package chapter4;

import java.util.Scanner;

public class Test17 {
    public static void main(String args[]){
        //使用多重循环打印三角形
        Scanner scanner=new Scanner(System.in);
        int s=scanner.nextInt();
        for(int i=1;i<=s;i++){
            for(int j=1;j<=i;j++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

  1. 熟悉使用字符串判断
package chapter4;

import java.util.Scanner;

public class Test18 {
    public static void main(String args[]){
        Scanner scanner=new Scanner(System.in);
        while(true){
            System.out.println("我是帅哥吗?请回答yes/no");
            String name=scanner.next();
            if(name.equals("yes")){   //对比相等,字符串要使用equals(),不能使用==
                System.out.print("恭喜你说对!");
                break;
            }else{
                System.out.println("答案错误,请重新回答。");
            }
        }
        scanner.close();
    }
}

  1. 出租车行程收费,具体收费标准写在了代码注释
package chapter4;

import java.util.Scanner;

public class Test19 {
    public static void main(String args[]){
        Scanner scanner=new Scanner(System.in);
        int distance=scanner.nextInt();
        int fare;
        //出租车,起步价3公里以内(包含)收费10块钱,超过3公里但不超过6公里(包含)的收费每公里5块钱,
        // 超过6公里但不超过10公里(包含)的收费每公里8块钱,超过10公里的收费每公里10块钱,小帅想知道自己从一个地方到另一个地方要多少钱?
        if(distance <= 3){
            fare = 10;
            System.out.println("收费 " + fare + " 块钱");
        }else if(distance <= 6){
            fare = 10 + (distance - 3) * 5;
            System.out.println("收费 " + fare + " 块钱");
        }else if(distance <= 10){
            fare = 10 + 3 * 5 + (distance - 6) * 8;
            System.out.println("收费 " + fare + " 块钱");
        }else {
            fare = 10 + 3 * 5 + 4 * 8 + (distance - 10) * 10;
            System.out.println("收费 " + fare + " 块钱");
        }

        scanner.close();
    }
}

  1. 判断闰年,一、被4整除,但不能被100整除;二、能够被400整除
package chapter4;

import java.util.Scanner;

public class Test20 {
    public static void main(String args[]){
        Scanner scanner=new Scanner(System.in);
        int year=scanner.nextInt();
        //判断闰年,一、被4整除,但不能被100整除;二、能够被400整除
        if((year%4==0 && year%100!=0)||year%400==0){
            System.out.print("这一年是闰年:"+year);
        }else{
            System.out.print("这一年不是闰年:"+year);
        }
        scanner.close();
    }
}


  1. 判断水仙花数,即它的各个位数的立方和等于其本身,比如:153
package chapter4;

import java.util.Scanner;

public class Test21 {
    public static void main(String args[]){
        Scanner scanner = new Scanner(System.in);
        int flower=scanner.nextInt();
        int sum=0;
        //判断水仙花数,即它的各个位数的立方和等于其本身,比如:153
        String f=flower+"";
        for(int i=0;i<f.length();i++){
            char c=f.charAt(i);
            int s=Character.getNumericValue(c);
            sum+=s*s*s;
        }
        if(sum==flower){
            System.out.print("这是一颗水仙花数");
        }else{
            System.out.print("这不是一颗水仙花数");
        }
        scanner.close();
    }
}

  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值