java逻辑控制

顺序执行

按照代码书写的顺序执行

public static void main(String[] args) {
        System.out.println("onward");
        System.out.println("and");
        System.out.println("upward");
    }

条件执行:if、switch

if语句

语法格式1:

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

如果布尔表达式结果为true时,则执行语句,否则不执行
语法格式2:

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

如果布尔表达式结果为true时,则执行语句1,否则执行else中的语句2
语法格式3:

if(布尔表达式1){
	//语句1
}else if(布尔表达式2){
	//语句2
}else{
	//语句3
}

如果布尔表达式1结果为true时,则执行语句1,否则若布尔表达式2结果为true,执行语句2,否则执行else中的语句3

练习:

  1. 判断一个数字是奇数还是偶数
public static void main(String[] args) {
        int num = 10;
        if (num % 2 == 0){
            System.out.println("偶数");
        }else{
            System.out.println("奇数");
        }
    }
  1. 判断一个数是正数、负数、还是0
public static void main(String[] args) {
        int num = -10;
        if (num > 0){
            System.out.println("正数");
        }else if(num < 0){
            System.out.println("负数");
        }else{
            System.out.println("零");
        }
    }
  1. 判断一个年份是否为闰年
public static void main(String[] args) {
        int year = 2024;
        if (year % 400 == 0){
            System.out.println("闰年");
        }else if (year % 100 != 0){
            if (year % 4 == 0){
                System.out.println("闰年");
            }else{
                System.out.println("不是闰年");
            }
        }else{
            System.out.println("不是闰年");
        }
    }

注意:

  • 代码风格
//风格1-->推荐
int x = 10;
if (x == 10){
	//语句1
}else{
	//语句2
}
//风格2
int x = 10;
if (x == 10)
{
	//语句1
}
else
{
	//语句2
}

两种方式都是合法的,java更推荐第一种,显得代码更加紧凑。

  • 分号问题
public static void main(String[] args) {
        int x = 10;
        if (x == 10);
        {
            System.out.println("don't give up");//运行结果:don't give up
        }
    }

此处多写了一个;号,导致分号成了if的语句体,而{}内的代码已经成为了与if无关的代码块

  • 悬垂else问题
    if/else语句可以不加{},直接写语句,但是只能写一条语句,此时else与最近的if相匹配,但实际不建议这样写,不易于程序员检查和阅读,也容易出现错误。
public static void main(String[] args) {
        int x = 20;
        int y = 10;
        if (x == 10)
            if (y == 20)
                System.out.println("fighting");
        else
            System.out.println("don't give up");
        //结果什么也没输出
    }

加上大括号后就十分容易理解

public static void main(String[] args) {
        int x = 20;
        int y = 10;
        if (x == 10) {
            if (y == 20) {
                System.out.println("fighting");
            } else {
                System.out.println("don't give up");
            }
        }
    }

switch语句

基本语法

switch(表达式){
	case 常量值1:{
		语句1;
		break;
		}
	case 常量值2:{
		语句2;
		break;
		}
	...
	default:{
		内容都不满足时执行此语句;
		break;
	}
}

执行流程:

  1. 先计算表达式的值
  2. 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
  3. 当表达式的值没有与所列项匹配时,执行default语句

例子:根据day的值输出星期

public static void main(String[] args) {
       int day = 7;
       switch(day){
           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;
           }
       }
    }

注意:

  • 多个case后的常量值不可以重复
  • switch的括号内只能是以下类型的表达式:
    • 基本类型:byte,short,int,char,注意不能是long
    • 引用类型:String常量串,枚举类型
  • break不要遗漏,否则会失去“多分支选择的结果”
public static void main(String[] args) {
        int day = 1;
        switch(day){
            case 1: {
                System.out.println("星期一");
            }
            default:{
                System.out.println("输入有误");
            }
        }
        //输出结果:
        //星期一
        //输出有误
    }
  • switch 不能表达复杂的条件
public static void main(String[] args) {
        int num = 12;
        if (num >= 10 && num <= 20){		//这其实是一个布尔表达式,所以不能用switch
            System.out.println("live and learn");
        }
    }
  • switch支持嵌套,但很丑,一般不推荐

循环结构:while、do while、for

while循环

基本语法格式:

while(循环条件){
	循环语句;
}

循环条件为true,则执行循环语句,否则循环结束。
例子1:打印1~10的数字

//打印1~10的数字
    public static void main(String[] args) {
        int num = 1;
        while(num <= 10){
            System.out.println(num);
            num++;
        }
    }

例子2:计算1~100的和

//计算1~100的和
    public static void main(String[] args) {
        int num = 1;
        int sum = 0;
        while(num <= 100){
            sum += num;
            num++;
        }
        System.out.println(sum);
    }
    //计算结果是5050

例子3:计算5的阶乘

//计算5的阶乘
    public static void main(String[] args) {
        int num = 1;
        int sum = 1;
        while(num <= 5){
            sum *= num;
            num++;
        }
        System.out.println(sum);
        //计算结果是120
    }

例子4:计算 1! + 2! + 3! + 4! + 5!

//计算 1! + 2! + 3! + 4! + 5!
    public static void main(String[] args) {
        int num = 1;
        int sum = 0;
        while(num <= 5){
            int result = 1;
            int i = 1;
            while(i <= num){
                result *= i;
                i++;
            }
            sum += result;
            num++;
        }
        System.out.println(sum);
    }
    //计算结果是153

注意:

  • 和if一样,while后可以不加{},但不写只可以加一条语句,建议加上
  • 和if一样,while后面的{建议和while写在同一行
  • 和if一样,while后面不要多写分号,否则会导致循环不能正确执行
public static void main(String[] args) {
        int num = 1;
        while(num <= 10);
        {
            System.out.println(num);
            num--;
        }
        //程序死循环
    }

while的语句体是一个空语句,实际的{}部分与循环无关,此时num <= 10 恒成立,导致代码死循环。

break

break的功能是让循环提前结束。
例子1:找到100~200中第一个3的倍数

 //找到100~200中第一个3的倍数
    public static void main(String[] args) {
        int num = 100;
        while(num <= 200){
            if (num % 3 == 0)
            {
                System.out.println(num);
                break;
            }
            num++;
        }
        //输出102
    }

continue

continue 的功能是跳过这次循环,立即进入下次循环
例子:找到100~200中所有3的倍数

//找到100~200中所有3的倍数
    public static void main(String[] args) {
        int num = 100;
        while(num <= 200){
            if (num % 3 != 0){
                num++;
                continue;
            }
            System.out.println(num);
            num++;
        }
    }

for循环

基本语法:

for(表达式1; 布尔表达式2;表达式3){
	表达式4;
}

表达式1:用于初始化循环变量初始值设置,在循环最开始时执行,仅执行一次。
表达式2:循环条件,满足则循环继续,否则循环结束。
表达式3:循环变量更新方式
例子1:打印1~10的数字

public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            System.out.println(i);
        }
    }

例子2:计算1~100的和

public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; i <= 100; i++){
            sum += i;
        }
        System.out.println(sum);
        //计算结果是5050
    }

例子3:计算 5 的阶乘

public static void main(String[] args) {
        int sum = 1;
        for (int i = 1; i <= 5; i++) {
            sum *= i;
        }
        System.out.println(sum);
        //计算结果是120
    }

例子4:计算 1! + 2! + 3! + 4! + 5!

//计算 1! + 2! + 3! + 4! + 5!
    public static void main14(String[] args) {
        int num = 1;
        int sum = 0;
        while(num <= 5){
            int result = 1;
            int i = 1;
            while(i <= num){
                result *= i;
                i++;
            }
            sum += result;
            num++;
        }
        System.out.println(sum);
        //计算结果是153
    }

注意:

  • 和if一样,for后可以不加{},但不写只可以加一条语句,建议加上
  • 和if一样,for后面的 { 建议和for写在同一行
  • 和if一样,for后面不要多写分号,否则会导致循环不能正确执行
  • 和while一样,结束单趟循环用continue,结束整个循环用break

do while

基本语法:

do{
	循环语句;
}while(循环条件);

先执行循环语句,再判定循环条件,循环条件成立则继续执行,否则循环结束
例子:打印1~10的数字

//打印1~10的数字
    public static void main(String[] args) {
        int num = 1;
        do{
            System.out.println(num);
            num++;
        }while(num <= 10);
    }

注意:

  • do while循环最后的分号不能忘记
  • 一般do while很少用到,推荐使用while和for循环

输入输出

输出到控制台

基本语法:

System.out.println(msg);//输出一个字符串,带换行
System.out.print(msg);//输出一个字符串,不带换行
System.out.printf(format,msg);//格式化输出
  • println 输出的内容自带\n,print 不带\n
  • printf的格式化输出方式和C语言的printf是基本一致的

代码示例:

public static void main(String[] args) {
        System.out.println("onward and upward");
        System.out.print("onward and upward");
        System.out.println();
        int num = 10;
        System.out.printf("num = %d", num);
    }

从键盘输入

使用Scanner读取字符串/整数/浮点数

import java.util.Scanner;//需要导入util包
public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的名字:");
        String name = scanner.nextLine();
        System.out.println("请输入你的年龄:");
        int age = scanner.nextInt();
        System.out.println("请输入你的工资:");
        float salary = scanner.nextFloat();
        System.out.println("你的信息如下:");
        System.out.println("名字:"+name+" 年龄:"+age+" 工资:"+salary);
        scanner.close();//调用关闭方法
    }

使用 Scanner 循环读取 N 个数字,并求取其平均值

//使用 Scanner 循环读取 N 个数字,并求取其平均值
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int sum = 0;
        int num = 0;
        while(scanner.hasNextInt()){
            sum += scanner.nextInt();
            num++;
        }
        System.out.println(sum / num);
        scanner.close();
    }

当循环输入多个数据的时候,使用ctrl+z来结束输入(Windows上使用ctrl+z,Linux/Mac上使用ctrl+d)


今天我们先学习到这,继续保持学习,努力定不会辜负我们的!!!

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值