Kbaor_2023_9_22_Java_运算符

Java_运算符

01-算数运算符

+
-
*
---------------------------
/ : 整数相除, 结果只能得到整数, 想要得到带有小数的结果, 需要有小数参与运算
% : (取模) 得到的是除法之后剩下的余数
public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    System.out.println("请输入一个三位数:");
    int num = sc.nextInt();

    int ge = num % 10;
    int shi = num / 10 % 10;
    int bai = num / 100;

    System.out.println("整数" + num + "的个位为:" + ge);
    System.out.println("整数" + num + "的十位为:" + shi);
    System.out.println("整数" + num + "的百位为:" + bai);
}

02-字符串的拼接操作

介绍: 当 + 号操作过程中, 如果遇到了字符串, 这时候就是字符串连接符了, 而不是算数运算符了

System.out.println("5+5=" + 5+5);   // "5+5=55"

System.out.println("5+5=" + (5+5)); //  "5+5=10"

03-自增自减运算符

++ : 让变量自身的值 + 1
-- : 让变量自身的值 - 1

1. 单独使用 (推荐)

		一句代码当中, 只做 ++, --
		
		int a = 10;
		a++;
		++a;
		
		++, -- 在前在后没有区别的

2. 参与运算使用 (面试)

		++在前: 先自增, 再操作 
		++在后: 先操作, 再自增
		
					将该变量原本记录的值取出来, 做操作, 然后再进行自增
					
					int a = 10;
					int b = a++;
					Systsem.out.println(a);  // 11
					Systsem.out.println(b);  // 10

public static void main(String[] args) {
    int x = 10;
    int y = ++x;
    int z = y++;

    System.out.println("x=" + x);
    System.out.println("y=" + y);
    System.out.println("z=" + z);

    System.out.println("----------------------");

    int a = 10;
    int b = (++a) + (a++) + (a*10);

    System.out.println("a=" + a);
    System.out.println("b=" + b);
}
注意事项: 自增自减运算符, 只能操作变量, 不能操作常量

04-类型转换-隐式转换

  • 基本的类型转换 :
    • 将取值范围小的数据, 给取值范围大的变量赋值, 可以直接赋值
    • 简单记 : 小的给大的, 可以直接给
    • 这里的小和大指的是, 取值范围
int a = 10;
double b = a;
System.out.println(b);  // 10.0
byte - short - int - long - float - double

细节:float虽然占用4个字节, 但是取值范围要比8个字节的long更大
  • 运算过程中的隐式转换 :
    • 思路 : 如果数据类型不统一 , 是没有办法运算的
    • 当取值范围小的数据, 和取值范围大的数据在一起运算的时候, 小的会将自己提升为大的类型, 然后再进行运算
    • byte short char 这三个类型在运算的时候, 直接提升为 int 类型

05-类型转换-强制转换

  • 将取值范围大的数据, 给取值范围小的数据赋值 , 不允许直接赋值, 需要强转
    • 简单记 : 大的给小的, 不允许直接给, 需要强转
double a = 12.3;
int b = (int)a;
System.out.println(b);  // 12


int a = 10;
byte b = (byte)a;
System.out.println(b);  // 10

建议: 今后尽量减少强转的使用, [有可能]会造成精度损失
  • 类型转换的面试题
package com.itheima.test;

public class OperatorTest3 {
    /*
        需求: 阅读如下代码, 观察是否存在问题, 如果有, 请说明原因并改正

        byte b1 = 3;
        byte b2 = 4;
        byte b3 = b1 + b2;

        错误原因: b1和b2是两个byte类型, 在相加的时候, 会直接提升为int类型
                    提升之后, 就是两个int相加了, 相加的结果还是int, 将int给byte赋值, 属于大给小, 需要强转.

        改正后:
                byte b1 = 3;
                byte b2 = 4;
                byte b3 = (byte)(b1 + b2);

        -------------------------------------------------------

        byte b = 3 + 4;

        疑惑: 这里的3和4是两个整数常量, 所有整数默认是int类型, 相加之后结果也应该是一个int
                    将int赋值给byte, 需要强转啊.

        原因: 3和4是两个常量, Java存在常量优化机制
                    在编译的时候(javac), 就会将3和4相加, 计算出一个7的结果

                    .class(字节码文件中) : byte b = 7;

                    检查: 该结果数据是否在byte的取值范围内
                                不在: 编译失败
                                在: 编译通过
     */
    public static void main(String[] args) {
        byte b = 3 + 4;
    }
}

06-赋值运算符

基本赋值运算符:

	= : 将等号右边的数据, 赋值给左边的变量
	
	int a = 10;

扩展赋值运算符:

	+= : 将符号左右两边的数据, 做加法运算, 将结果赋值给左侧的变量
	-= : 将符号左右两边的数据, 做减法运算, 将结果赋值给左侧的变量
	*=
	/=
	%=
        
细节: 底层自带强转效果

07-关系运算符-比较运算符

> 
>=
<
<=
==
!=

这些符号都是让数据直接做比较的, 就会得到boolean类型的true, false

注意: =号和==号是有区别的

		=号 : 赋值操作
		==号 : 比较操作

08-逻辑运算符

介绍:

1. 代码层面: 用于连接boolean类型的表达式, 或者是值
2. 理解层面: 可以整合多个条件, 为一段整体的逻辑
分类:

&(与) : 并且, 遇false则false
|(或) : 或者, 遇true则true
!(非) : 取反
^(异或) : 相同为false, 不同为true

09-短路逻辑运算符

& : 没有短路效果, 符号左边无论是true, 还是false, 右边都要继续执行
&& : 具有短路效果, 当符号左边为false的时候, 右边就不执行了
		如果符号左边为true, 右边要继续执行
		
| : 没有短路效果, 符号左边无论是true, 还是false, 右边都要继续执行
|| : 具有短路效果, 当符号左边为true的时候, 右边就不执行了
		如果符号左边为false, 右边要继续执行
结论: 今后为了提升效率逻辑运算符用的最多的

&& || !

10-三元运算符

  • 介绍 : 可以根据一个判断条件, 达成二者选其一的效果
格式: 

判断条件 ? 值1 : 值2;

执行流程:

1. 执行判断条件, 看其返回结果是true, false
2. true : 值1就最终结果
3. false : 值2就是最终结果

int a = 10;
int b = 20;
int max = a > b ? a : b;

11-运算符的优先级

熟练掌握()的使用

()的优先级是最高的.

12-流程控制语句分类

  • 流程控制语句介绍 : 通过一些语句, 来控制程序的执行流程
  • 分类:
    • 顺序结构 : 所有Java程序, 默认就是顺序结构
    • 分支结构 : if switch
    • 循环结构 : for while do..while

13-分支结构语句 - if

if语句的格式1

    if(判断条件){
        语句体;
    }

 执行流程:

    1. 执行判断条件,看其返回结果是true, false
    2. true : 执行 {} 中的语句体
    3. false : 不执行 {} 中的语句体

 注意事项:

    1. if语句的 () 和 {} 之间不要写分号
    2. if语句的 {} 中, 如果是一条语句, {} 可以省略不写, 但是不建议!
    3. if语句 () 中, 无论简单还是复杂, 只要给它一个boolean类型的数据, 就可以正常运作
if语句的格式2

	if(判断条件){
		语句体1;
	}else{
		语句体2;
	}
	
执行流程:

	1. 执行判断条件, 看其返回结果是true, false
    2. true : 执行语句体1
    3. false : 执行语句体2
if语句的第三种格式:

    if(判断条件1){
        语句体1;
    }else if(判断条件2){
        语句体2;
    }else if(判断条件3){
        语句体3;
    }
    ...
    else {
        语句体n+1;
    }

执行流程:
    1. 执行判断条件1, 看其返回的结果是true, 还是false
            true: 执行语句体1, 执行完毕后, 结束掉整个的if语句
            false : 进入第二步
    2. 执行判断条件2, 看其返回的结果是true, 还是false
            true : 执行语句体2, 执行完毕后, 结束掉整个的if语句
            false : 进入第三步
    ...

    3. 如果给出的所有条件, 都是失败的, 将会执行最后的 else, 语句体n+1;
package com.itheima.test;

import java.util.Scanner;

public class IfTest1 {
    /*
        95~100 : 自行车一辆
        90~94 : 游乐场玩一次
        80~89 : 变形金刚一个
        80以下 : 挨揍
     */
    public static void main(String[] args) {
        // 1. 使用Scanner键盘录入一个分数
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的成绩:");
        int score = sc.nextInt();
        // 2. 判断分数在哪一个奖励的区间
        if (score < 0 || score > 100) {
            System.out.println("您的输入有误, 请检查是否是0~100之间的");
        } else if (score >= 95 && score <= 100) {
            // 3. 打印出对应的奖励
            System.out.println("自行车一辆");
        } else if (score >= 90 && score <= 94) {
            System.out.println("游乐场玩一次");
        } else if (score >= 80 && score <= 89) {
            System.out.println("变形金刚一个");
        } else {
            System.out.println("挨揍");
        }
    }
}

package com.itheima.test;

import java.util.Scanner;

public class IfTest2 {
    /*
        95~100 : 自行车一辆
        90~94 : 游乐场玩一次
        80~89 : 变形金刚一个
        80以下 : 挨揍
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的成绩:");
        int score = sc.nextInt();

        if (score >= 0 && score <= 100) {
            // 代码能够走到这个 {} , 代表成绩绝对是 0~100之间的
            // 我们就只需要考虑, 给什么奖励即可

            if (score >= 95 && score <= 100) {
                // 3. 打印出对应的奖励
                System.out.println("自行车一辆");
            } else if (score >= 90 && score <= 94) {
                System.out.println("游乐场玩一次");
            } else if (score >= 80 && score <= 89) {
                System.out.println("变形金刚一个");
            } else {
                System.out.println("挨揍");
            }

        } else {
            System.out.println("您的成绩输入有误, 请检查是否是0~100之间");
        }
    }
}

posted @ 2023-09-22 00:26  Kbaor  阅读(19)  评论(0)    收藏  举报