zoukankan      html  css  js  c++  java
  • JavaSE第03篇:Java基础语法之运算符、分支结构

    本章将会延续JavaSE第02篇,详细讲解Java基础语法中的运算符和流程控制中的顺序结构、分支结构。

    第一章:运算符

    运算符,简而言之就是运算的符号。

    我们通常所理解的运算一般和数学有关系,同样编程中的运算和数学中运算规则是一致的。

    在数学中一般我们运算的是数字,在编程中运算的就是数据了。

    若要运算,那必然是少不了运算符号了。

    1.1-为什么需要运算符 (了解)

    从应用角度来看,在软件开发中,有很多很多业务功能需要通过程序运算的才能实现,比如:

    • 网上购物商品数量的统计、价格的计算
    • 支付宝或微信的消费转账
    • 玩游戏中游戏人物的生命值、金币的计算
    • ...

    如何命令计算机计算数据呢?这时就需要运算符号表示运算。

    1.2-运算符的分类(了解)

    • 赋值运算符

    • 算术运算符

    • 关系运算符

    • 逻辑运算符

    • 其他运算符

    1.3-赋值运算符(记忆)

    运算符格式和作用

    • 运算符号:=
    • 作用:可以把右侧的 数据 赋值给 指定的 变量

    代码

    int age = 10;  // 把数据10赋值给变量age
    

    1.4-算术运算符(记忆)

    运算符格式和作用

    • 运算符号:
      1. 表示加法运算:+
      2. 表示减法运算:-
      3. 表示乘法运算:*
      4. 表示除法运算:/
      5. 表示取模运算:%
    • 作用:可以实现数字相关的运算

    代码

    public static void main(String[] args) {
            int a = 10;
            int b = 3;
            /* 加法运算 */
            System.out.println(a + b);
            // 结果:13
            /* 减法运算 */
            System.out.println(a - b);
            // 结果:7
            /* 乘法运算 */
            System.out.println(a * b);
            // 结果:30
            /* 除法运算 */
            System.out.println(a / b);
            // 结果:3
            /* 取模运算-求余数 */
            System.out.println(a % b);
            // 结果:1
            /* 注意:在java中,任何整数不能除以0, 在运行时会发生错误! */
            System.out.println(200/0);
            // 结果:Exception in thread "main" java.lang.ArithmeticException: / by zero
    }
    
    

    1.5-关系运算符 (记忆)

    关系运算符也叫比较运算符

    运算符格式和作用

    • 运算符:
      • 大于:>
      • 小于:<
      • 等于:==
      • 大于等于:>=
      • 小于等于:<=
      • 不等于:!=
    • 作用:可以实现条件判断是否成立,运算结果是布尔值truefalse

    代码

    public static void main(String[] args) {
            int a = 10;
            int b = 12;
            /* 大于 */
            System.out.println(a > b);
            // 结果:false
            /* 小于 */
            System.out.println(a < b);
            // 结果:true
            /* 等于 */
            System.out.println(a == b);
            // 结果:false
            /* 大于等于 */
            System.out.println(a >= b);
            // 结果:false
            /* 小于等于 */
            System.out.println(a <= b);
            // 结果:true
            /* 不等于 */
            System.out.println(a != b);
            // 结果:true
    }
    

    注意:千万不要把"=="误写成“=”,"=="是判断是否相等的关系,"="是赋值。

    1.6-逻辑运算符(记忆)

    逻辑运算符格式及运算符作用

    逻辑运算符可以判断多个组合条件是否成立,运算结果是布尔值:true或false

    代码

    public class Operator {
    	public static void main(String[]args){
    		//定义变量 
    		int i = 100; 
    		int j = 200; 
    		int k = 300; 
    		//& “与”,并且的关系,只要表达式中有一个值为false,结果即为false
    		System.out.println((i > j) & (i > k)); //false & false,输出false
    		System.out.println((i < j) & (i > k)); //true & false,输出false
    		System.out.println((i > j) & (i < k)); //false & true,输出false
    		System.out.println((i < j) & (i < k)); //true & true,输出true
    		//| “或”,或者的关系,只要表达式中有一个值为true,结果即为true
    		System.out.println((i > j) | (i > k)); //false | false,输出false
    		System.out.println((i < j) | (i > k)); //true | false,输出true
    		System.out.println((i > j) | (i < k)); //false | true,输出true
    		System.out.println((i < j) | (i < k)); //true | true,输出true
    		//^ “异或”,相同为false,不同为true 
    		System.out.println((i > j) ^ (i > k)); //false ^ false,输出false
    		System.out.println((i < j) ^ (i > k)); //true ^ false,输出true
    		System.out.println((i > j) ^ (i < k)); //false ^ true,输出true
    		System.out.println((i < j) ^ (i < k)); //true ^ true,输出false
    		//! “非”,取反
    		System.out.println((i > j)); //false 
    		System.out.println(!(i > j)); //!false,,输出true
    	}
    }
    

    短路逻辑运算符

    在逻辑与运算中,只要有一个表达式的值为false,那么结果就可以判定为false了,没有必要将所有表达式的值都计算出来,短路与操作就有这样的效果,可以提高效率。

    同理在逻辑或运算中,一旦发现值为true,右边的表达式将不再参与运算

    • 逻辑与&,无论左边真假,右边都要执行。

    • 短路与&&,如果左边为真,右边执行;如果左边为假,右边不执行。

    • 逻辑或|,无论左边真假,右边都要执行。

    • 短路或||,如果左边为假,右边执行;如果左边为真,右边不执行。

    代码

    public class Operator2 {
    	public static void main(String[]args){
    		int x = 3;
    		int y = 4;
    		System.out.println(((x=x+1) > 4) & ((y=y+1) > 5)); // 两个表达都会运算 
    		System.out.println(x); // 4 
    		System.out.println(y); // 5 
    		int a = 3;
    		int b = 4;
    		System.out.println(((a=a+1) > 4) && ((b=b+1) > 5)); // 左边已经可以确定结果为false,右边不参与运算
    		System.out.println(a); // 4 
    		System.out.println(b); // 4
    	}
    }
    

    1.7-其他运算符 (记忆)

    • 复合赋值运算符

      • 运算符:+=-=/=*=%=

      • 作用:和变量相关,是算术运算符和赋值运算符的组合使用。

      • 代码:

        int age = 10;
        age+=3; 
        System.out.print(age); 
        // 运行结果:13。 age+=3 拆解 age = aeg + 3
    
    • 小括号

      • 运算符:(表达式)

      • 作用:可以提高运算的优先级。

      • 代码:

        int result = (10 + 8) * 2
    
    • 自增和自减

      • 运算符:++--

      • 作用:变量自增1或自减1

        • 前置自增或自减:++变量--变量,先让变量自身加1或减1,再参与表达式运算。
        • 后置自增或自减变量++变量--,先让变量自身参与表达式运算,再自身加1或减1
      • 代码:

        /* 前置自增 */
        int a = 10;
        System.out.print(++a);  // 结果:11
        System.out.print(a);  // 结果:11
        /* 后置自增 */
        int b = 10;
        System.out.print(b++);  // 结果:10
        System.out.print(b);  // 结果:11
    
    • 三元运算符

      • 格式:条件表达式?表达式1:表达式2

      • 意义:问号前面的位置是判断的条件,判断结果为boolean型,为true时调用表达式1,为false时调用表达式2。其逻辑为:如果条件表达式成立或者满足则执行表达式1,否则执行第二个。

      • 代码:

        int a = 10>8?10:8;
        System.out.print(a);  // 结果:10
    

    第二章:流程控制

    2.0-数据输入(了解)

    需求

    接收用户录入的两个数字,计算两个数字的和。

    知识准备:如何接收用户录入的数据

    我们可以通过 Scanner 类来获取用户的输入。使用步骤如下:

    1、导包。Scanner 类在java.util包下,所以需要将该类导入。导包的语句需要定义在类的上面。

    import java.util.Scanner;
    

    2、创建Scanner对象。

    Scanner sc = new Scanner(System.in);// 创建Scanner对象,sc表示变量名,其他均不可变
    

    3、接收数据

    int i = sc.nextInt(); // 表示将键盘录入的值作为int数返回。
    

    4、示例

    import java.util.Scanner; 
    public class ScannerDemo { 
    	public static void main(String[] args) { 
    		//创建对象 
    		Scanner sc = new Scanner(System.in); 
    		//接收数据 
    		int x = sc.nextInt(); 
    		//输出数据 
    		System.out.println("x:" + x); } 
    }
    

    功能实现:

    import java.util.Scanner;
    public class Test01 {
    	public static void main(String[]args){
    		// 创建Scanner对象
    		Scanner scanner = new Scanner(System.in);
    		// 提示输入数据
    		System.out.println("请输入第一个数字:"); 
    		// 接收用户输入的第一个数据
    		int num1 = scanner.nextInt();
    		// 提示输入数据
    		System.out.println("请输入第二个数字:"); 
    		// 接收用户输入的第二个数据
    		int num2 = scanner.nextInt();
    		// 计算两个数字的和并输出
    		int sum = num1 + num2;
    		// 任何数据和字符串相加时,"+"表示连接符
    		System.out.println(num1 + "+" + num2 + "=" + sum);
    	}
    }
    

    输出结果

    请输入第一个数字:
    100
    请输入第二个数字:
    20
    100+20=120
    

    2.1-为什么要学习流程控制 (了解)

    流程,指的是程序的执行顺序。程序默认的执行顺序是自上而下执行的。

    但是,在程序中有些程序是选择执行的或是重复执行的,不同的选择会有不同的功能。比如我们玩游戏时王者荣耀时,我们在手机上选择不同英雄时,本质底层就是程序在执行不同的代码。

    所以,若要控制程序执行的流程,就必须学习流程控制语句。

    流程控制语句分为三大类:顺序结构、分支结构循环结构.

    本篇我们学习顺序结构和分支结构,循环结构我们下一篇再细细讲解。

    2.2-顺序结构 (重点)

    顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序自上而下、从左向右,依次执行,程序中大多数的代码都是这样执行的。

    顺序结构执行流程图:

    public class Test {
    	public static void main(String[]args){
    		System.out.println(1); 
    		System.out.println(2); 
    		System.out.println(3); 
    		System.out.println(4); 
    	}
    }
    /*
    	执行结果:
    	1
    	2
    	3
    	4
    */
    

    2.3-分支结构 (重点)

    2.3.1- if语句

    语句格式:

    if(条件表达式){
      // 代码块
    }
    

    执行流程:

    若条件表达式成立(结果是true),则执行代码块中的程序。

    示例:

    需求:接收用户输入的年龄,判断用户是否满18岁,若满18岁,则输出“年龄合法”

    import java.util.Scanner;
    public class Test02 {
    	public static void main(String[]args){
    		// 创建Scanner对象
    		Scanner scanner = new Scanner(System.in);
    		// 提示输入数据
    		System.out.println("请输入您的年龄:"); 
    		// 接收用户输入的年龄
    		int age = scanner.nextInt();
    		// 判断
    		if(age >=18 ) {
    			System.out.println("年龄合法");
    		}
    	}
    }
    

    2.3.2- if-else语句

    语句格式

    if(条件表达式){
      // 代码块
    }else {
      // 代码块
    }
    
    

    执行流程

    若条件表达式成立(结果是true),则执行if代码块中的程序,反之执行else代码块中的程序。

    示例:

    需求:接收用户输入的年龄,判断用户是否满18岁,若满18岁,则输出“年龄合法”,否则输出“年龄不合法”

    import java.util.Scanner;
    public class Test03 {
    	public static void main(String[]args){
    		// 创建Scanner对象
    		Scanner scanner = new Scanner(System.in);
    		// 提示输入数据
    		System.out.println("请输入您的年龄:"); 
    		// 接收用户输入的年龄
    		int age = scanner.nextInt();
    		// 判断
    		if(age >=18 ) {
    			System.out.println("年龄合法");
    		}else {
    			System.out.println("年龄不合法");
    		}
    	}
    }
    

    2.3.3- if-else if-...else语句

    语法格式:

    if(条件表达式){
      // 代码块
    }else if(条件表达式){   // 需求不同,else if语句定义的个数不同
      // 代码块
    }
    else if(条件表达式){
      // 代码块
    }
    // ...
    else { // 需求不同,else语句可有可无
      // 代码块
    }
    

    执行流程:

    代码从上而下依次判断。

    若其中有满足条件的,则进入对于的代码块执行,后续分支不再执行。

    若都不满足,则执行else中的语句。

    示例:

    需求:接收用户输入的学习成绩,输出等级。成绩大于等于90是A,大于等于80小于90是B,大于等于70小于80是C,大于等于60小于70是D,其他情况时E

    import java.util.Scanner;
    public class Test04 {
    	public static void main(String[]args){
    		// 创建Scanner对象
    		Scanner scanner = new Scanner(System.in);
    		// 提示输入数据
    		System.out.println("请输入学生成绩:"); 
    		// 接收用户输入的数据
    		float score = scanner.nextFloat();
    		// 判断
    		if(score>=90) {
    			System.out.println("A");
    		}else if(score>=80) {
    			System.out.println("B");
    		}else if(score>=70) {
    			System.out.println("C");
    		}else if(score>=60) {
    			System.out.println("D");
    		}else{
    			System.out.println("E");
    		}
    	}
    }
    

    2.3.4- switch语句

    语法格式:

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

    执行流程:

    首先计算出表达式的值

    其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。

    最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

    示例1:

    需求:提示用户录入1-7之间的数字,根据数据返回给用户星期几

    import java.util.Scanner;
    public class Test05 {
    	public static void main(String[]args){
    		// 创建Scanner对象
    		Scanner scanner = new Scanner(System.in);
    		// 提示输入数据
    		System.out.println("请输入一个数字(1-7):"); 
    		// 接收用户输入的数据
    		int num = scanner.nextInt();
    		// 判断
    		switch (num){
    			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;
    		}
    	}
    }
    

    示例2:

    需求:一年有12个月,分属于春夏秋冬4个季节,键盘录入一个月份,请用程序实现判断该月份属于哪个季节,并输出。

    import java.util.Scanner;
    public class Test06 {
    	public static void main(String[]args){
    		// 创建Scanner对象
    		Scanner scanner = new Scanner(System.in);
    		// 提示输入数据
    		System.out.println("请输入一个月份(1-12):"); 
    		// 接收用户输入的数据
    		int num = scanner.nextInt();
    		// 判断
    		switch (num){
    			case 12:
    			case 1:
    			case 2:
    				System.out.println("冬"); 
    			break;
    			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;
    			default
    				System.out.println("输入的数字不合法"); 
    			
    		}
    	}
    }
    

    注意:如果switch中得case,没有对应break的话,则会出现case穿透的现象。

  • 相关阅读:
    (转)kubernetes更新操作详解--kubectl apply
    awk做统计和计算平均值
    kvm虚拟化
    容器(转
    使用python3来实现简易web服务
    12306接口
    python3中的venv环境
    markdown 插入表格
    面向对象编程——类(class)2
    开发纯ndk程序之环境搭配
  • 原文地址:https://www.cnblogs.com/lpl666/p/13296717.html
Copyright © 2011-2022 走看看