1 控制台输入

获取用户在控制台输入的内容,使用引用数据类型Scanner

使用Scanner步骤:

  • 导包
  • 创建
  • 使用
// 声明当前类所在的包
package cn.javasm.demo;
// 导包
import java.util.Scanner;

public class TestDemo {
    public static void main(String[] args) {
        // 创建
        // 类型 变量名 = new 类型(System.in);
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        // 使用
        // 获取int类型的数据
        int a = scanner.nextInt();
        System.out.println("用户输入的是" + a);
        // String是引用数据类型 表示字符串
        // 获取用户输入的字符串
        String str = scanner.next();
        System.out.println(str);
    }
}

2 流程控制语句

程序在执行过程中,各条语句的执行顺序对程序的结果是有直接的影响的。也就是说程序的流程对运行结果有直接的影响。所以我们必须要清楚每一条语句的执行流程。

分类:

  • 顺序结构
  • 选择结构
  • 循环结构

2.1 顺序结构

顺序结构就是代码从上到下执行。默认都是顺序结构。

public static void main(String[] args) {
        System.out.println("今天是6月6号");
        System.out.println("明天就要高考了");
        System.out.println("下星期穿少点,太热了");
    }

2.2 选择结构

选择结构也叫分支结构,根据不同的条件执行不同的代码。

选择结构分为:

  • if语句
  • switch语句
2.2.1 if语句

if语句分为三种格式

2.2.1.1 if语句格式1

格式:

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

执行流程:

  • 首先判断布尔表达式的结果是true还是false
  • 如果是true就执行语句体
  • 如果是false就不执行语句体,直接执行其他语句
public static void main(String[] args) {
        System.out.println("一天晚上闲的没事干,在大街游荡~");
        System.out.println("发现一个网吧");
        int age = 17;
        if (age >= 18){
            System.out.println("掏身份证开机");
            System.out.println("上号");
            System.out.println("开始骂人");
            System.out.println("挂机");
            System.out.println("下机");
        }
        System.out.println("回家睡觉");
    }

注意:如果if语句中只有一行代码,可以省略大括号

流程图:

2.2.1.2 if语句格式2

格式:

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

执行流程:

  • 首先判断布尔表达式的结果是true还是false
  • 如果是true就执行语句体1
  • 如果是false就执行语句体2
public static void main(String[] args) {
        // 创建
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入您的年龄:");
        // 使用
        int age = scanner.nextInt();
        if (age >= 18){
            System.out.println("成年人要为自己做的事负责");
        }else {
            System.out.println("未成年人可以少负责");
        }
    }

流程图

课堂练习: 输入一个整数,输出这个数是奇数还是偶数

public static void main(String[] args) {
//        输入一个整数,输出这个数是奇数还是偶数
        // alt + 回车  自动导包
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int num = scanner.nextInt();
        // 判断是奇数还是偶数
        if (num % 2 == 0){
            System.out.println(num + "是偶数");
        }else {
            System.out.println(num + "是奇数");
        }
    }
2.2.1.3 if语句格式3

格式:

if (布尔表达式1){
    语句体1;
}else if(布尔表达式2){
    语句体2;
}else if(布尔表达式3){
    语句体3;
}else if(布尔表达式4){
    语句体4;
}
...
    else if(布尔表达式n){
        语句体n;
    }else{
        语句体n + 1;
    }

执行流程:

  • 首先判断布尔表达式1的结果是true还是false
  • 如果是true就执行语句体1
  • 如果是false就继续判断布尔表达式2的结果是true还是false
  • 如果是true就执行语句体2
  • 如果是false就继续判断布尔表达式3的结果是true还是false
  • .....
  • 如果没有任何布尔表达式的结果是true,就执行语句体n + 1

流程图:

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int age = scanner.nextInt();
        if (age > 0 && age < 7){
            System.out.println("婴幼儿");
        }else if (age >= 7 && age < 12){
            System.out.println("儿童");
        }else if (age >= 12 && age < 18){
            System.out.println("少年");
        }else if (age >= 18 && age < 40){
            System.out.println("青年");
        }else if (age >= 40 && age < 60){
            System.out.println("中年");
        }else if (age >= 60 && age < 110){
            System.out.println("老年");
        }else {
            System.out.println("妖怪~");
        }
    }

课堂练习:

x >= 10 y = 3x + 1

-2 < x < 10 y = 3x

x <= -2 y = 3x - 1

让用户输入x的值,计算出y的值并输出

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个x的值");
        int x = scanner.nextInt();
        int y;
        if (x >= 10){
            y = 3 * x + 1;
        }else if(x > -2 && x < 10){
            y = 3 * x;
        }else {
            y = 3 * x - 1;
        }
        System.out.println("y的值是" + y);
    }

课堂练习:根据用户输入的月份,输出正确的季节

public static void main(String[] args) {
//        根据用户输入的月份,输出正确的季节
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入月份");
        int month = scanner.nextInt();
        if (month >= 3 && month <= 5){
            System.out.println("春天去郊游");
        }else if (month >= 6 && month <= 8){
            System.out.println("夏天吃西瓜");
        }else if (month >= 9 && month <= 11){
            System.out.println("秋天吃柿子");
        }else if (month == 12 || month == 1 || month == 2){
            System.out.println("冬天烤红薯");
        }else {
            System.out.println("您输入的月份不正确!");
        }
    }
2.2.2 switch语句

格式:

switch (表达式){
    case 目标值1:
        语句体1;
        break;
    case 目标值2:
        语句体2;
        break;
    ...
    case 目标值n:
        语句体n;
        break
    default:
        语句体n + 1;
        break;
}

解释:

  • 表达式的取值类型可以是 byte short int char
  • JDK5之后可以是枚举
  • JDK7之后可以是字符串
  • case 后面是要和表达式进行比较的值
  • 语句体可以是一条语句,也可以是多条语句
  • break表示中断,可以立即结束switch语句
  • default语句表示所有的目标值都没有匹配时,执行default中的语句体

执行流程:

  • 首先计算表达式的值
  • 使用表达式的值依次和case的目标值进行比较,如果相同就执行对应的语句体。
  • 如果都不相同,就执行default语句
public static void main(String[] args) {
        // 根据用户输入的数字,显示正确的星期几
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入数字");
        int weekday = scanner.nextInt();
        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("请输入1-7的整数");
                break;
        }
    }

流程图:

注意点:

  • default中的break如果在代码的最后,可以省略
  • switch语句中的顺序不影响最终的结果
  • case具有穿透效果。如果没有break的影响,会一直执行下去。

课堂练习:

根据用户输入的月份,输出正确的季节

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入对应的月份");
        int month = scanner.nextInt();
        switch (month){
            case 3:
            case 4:
            case 5:
                System.out.println("春天万物复苏");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("夏天捉小龙虾");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("秋天登高");
                break;
            case 12:
            case 1:
            case 2:
                System.out.println("冬天打雪仗");
                break;
            default:
                System.out.println("傻der~");
                break;
        }
    }

2.3 循环结构

2.3.1 概述

循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称之为循环体语句。当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false从而结束循环。

循环语句:

  • for循环
  • while循环
  • do-while循环
2.3.2 循环语句的组成
  • 循环变量初始化(初始化表达式):

一条或者多条语句,这些语句完成一些初始化操作

  • 循环出口(布尔表达式)

这是一个boolean表达式,这个表达式能决定是否要继续执行循环体

  • 循环语句(循环体)

这个部分是真正要多次执行的代码

  • 循环增量(步进表达式)

这个部门在一次循环体结束后,下一次循环判断条件执行前执行。通过控制循环条件变量,使得循环在合适的时候结束。

2.3.3 for循环结构

格式:

for (初始化表达式1;布尔表达式2;步进表达式4){
    循环体3;
}

执行流程:

执行顺序: 1 2 3 4 2 3 4 ..... 2

如果布尔表达式的结果是true,那么就继续循环,如果结果是false,就结束循环

流程图:

public static void main(String[] args) {
//        // 打印100次HelloWorld
//        for (int i = 1;i <= 100;i++){
//            System.out.println("HelloWorld" + i);
//        }
//
//        // 打印10 - 1
//        for (int i = 10;i >= 1;i--){
//            System.out.println(i);
//        }

        // 求1-100之间的偶数和
        // 代表和的变量
//        int sum = 0;
//        for (int i = 1;i <= 100;i++){
//            // 判断i是否是偶数
//            if (i % 2 == 0){
//                sum += i;
//            }
//        }
//        // shift + alt + 上下键
//        System.out.println("和是" + sum);

        // 统计"水仙花数"的个数
        // 水仙花数是一个三位数,其中个位的立方 + 十位的立方  + 百位的立方和  等于 这个三位数自身
        // 153    3 * 3 * 3 + 5 * 5 * 5 + 1 * 1 * 1 = 153
        // 水仙花数的个数
        int count = 0;
        for (int i = 100;i < 1000;i++){
            // 获取i的个位十位和百位
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai = i / 100 % 10;
            if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i){
               count++;
            }
        }
        System.out.println("水仙花数有" + count + "个");
    }
2.3.4 while循环结构

基本格式:

while (布尔表达式){
    循环体语句;
}

扩展格式:

初始化表达式1;
while (布尔表达式2){
    循环体语句3;
    步进表达式4;
}

执行顺序: 1 2 3 4 2 3 4 ...2

流程图:

public static void main(String[] args) {
        // 输出100次HelloWorld
//        int i = 1;
//        while (i <= 100){
//            System.out.println("HelloWorld");
//            i++;
//        }

        // 求1-100之间的偶数和
//        int sum = 0;
//        int i = 2;
//        while (i <= 100){
//            sum += i;
//
//            i += 2;
//        }
//        System.out.println("sum的值是" + sum);

        // 打印水仙花数
        int i = 100;
        while (i < 1000){
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai = i / 100;

            // 判断是否是水仙花数
            if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i)
                System.out.println("水仙花数是" + i);
            i++;
        }
    }
2.3.5 do-while循环结构

基本格式:

do{
    循环体语句;
}while(布尔表达式);

扩展格式:

初始化表达式1;
do{
    循环体语句3;
    步进表达式4;
}while(布尔表达式2);

执行顺序:1 3 4 2 3 4 2 3 4 .....2

流程图:

    public static void main(String[] args) {
//        // 打印100次HelloWorld
//        int i = 1;
//        do{
//            System.out.println("HelloWorld");
//            i++;
//        }while (i <= 100);

        // 求 1- 100之和
//        int i = 1;
//        int sum = 0;
//        do{
//            sum += i;
//            i++;
//        }while (i <= 100);
//        System.out.println("sum的值是" + sum);

        // 统计水仙花数有多少个
        int i = 100;
        int count = 0;
        do{
            // 获取个位十位和百位
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai = i / 100;
            // 判断是否是水仙花数
            if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i) count++;

            i++;

        }while (i < 1000);

        System.out.println("水仙花数总共有" + count + "个");
    }

三种循环的区别?

  • dowhile循环至少会执行一次循环语句
  • for循环结束后,控制条件语句的那个变量就已经被回收了。但是while和doWhile循环中的变量依然存在。
  • 使用推荐: for --> while -- > doWhile

注意:循环是可以嵌套的。

        for (int i = 1;i <= 10;i++){
            System.out.println("i = " + i);
            for (int j = 1;j <= 10;j++){
                System.out.println("j = " + j);
            }
        }
2.3.6 跳转控制语句

让循环在某一步的时候结束或者跳过某些数据不要这些数据,Java提供了跳转控制语句来中断和跳转。

  • break 中断
    • 可以用在循环中
    • 也可以用在switch语句中
    • 表示立即结束循环或者结束switch语句
  • continue 继续
    • 只能用在循环中
    • 表示立即结束本次循环,开始下一次循环

无论是break还是continue,在多个循环嵌套中,只作用于当前循环

for (int i = 1;i <= 10;i++){
            System.out.println("i = " + i);
            for (int j = 1;j <= 10;j++){
                // 立即结束最近的循环
                if (j == 2) break;
                System.out.println("j = " + j);
            }
        }
2.3.7 死循环

死循环又称之为永真循环,或者无限循环.就是循环的条件判断一直都是true,循环不会结束。

死循环标准写法: while(true){}

        // 死循环
//        while (true){
//            int i = scanner.nextInt();
//            System.out.println(i);
//            if (i == 10) break;
//        }

//        for (; true; ) {
//        }
//        for (;;){
//
//        }

        String str = null;
        while (!"y".equals(str)){
            str = scanner.next();
            System.out.println(str);
        }

Logo

CANN开发者社区旨在汇聚广大开发者,围绕CANN架构重构、算子开发、部署应用优化等核心方向,展开深度交流与思想碰撞,携手共同促进CANN开放生态突破!

更多推荐