Java复习笔记-03

运算符&流程控制语句

变量案例补充

		// 编译这一行时,由于'b'没有超出c的范围,所以编译成功
        char c = 'b';
        // 编译这一行时,系统只知道c是char类型,而不知道c具体的值。
        // c是char类型,范围是0-65535
        // s是short类型,范围是-32768 - 32767
        // 由于c的正整数范围比s的正整数范围大,所以系统认为有可能放不下,报错。
        short s = (short) c;
        System.out.println(c);
        System.out.println(s);

1 运算符

1.1 运算符介绍

  • 运算符概述

    • 常量或者变量进行操作的符号称之为运算符 +
  • 表达式概述

    • 用运算符把常量或者变量连接起来,符合java语法的式子叫做表达式。
    • a + b
  • 运算符分类

    • 算术运算符
    • 赋值运算符
    • 关系运算符
    • 逻辑运算符
    • 三元运算符
    • 位运算

1.2 算术运算符

1.2.1 常规算术
+ - * / %
public static void main(String[] args) {
        // 重命名 shift + f6
        // 加     +
        // 减     -
        // 乘     *
        // 除     /
        // 取余   %   不看商,只看余数
        int a = 10;
        int b = 20;
        System.out.println(a + b);// 30
        System.out.println(a - b);// -10
        System.out.println(a * b);// 200
        // 在java中,对于整数来说,除法用的是小学一年级的算法
        // / 只看商,舍弃余数
        System.out.println(a / b);// 0
        // 只要算数运算中出现了小数,那么结果肯定是小数
        System.out.println(1 / 2.0);

        int i = (int) (4350.0 / 1000 * 1000);
        System.out.println(i);

        System.out.println(1 % 2);
        int num = 34324334;
        System.out.println(num % 2);
    }
1.2.2 扩展
		// 负数取余 就是看表达式左边值的符号  如果左边是正数,那么结果就是正数。如果左边是负数,结果就是负数
        System.out.println(-5 % 3);

        // 小数取余
        System.out.println(3.6 % 2);//1.6
        System.out.println(3 % 1.4);//0.2
        System.out.println(3 - 2.09);

        // ArithmeticException:数学异常
//        System.out.println(1 / 0);
        // NaN  not a number  不是一个数字
        System.out.println(0.0 / 0);

        // +可以用于字符相加
        char zifu1 = '我';
        System.out.println(zifu1 + 1);

        // + 可以用于字符串连接  任何数据类型和字符串进行相加,结果肯定是一个字符串
        System.out.println("Hello" + 1);
        // "Hello" + 3
        System.out.println("Hello" + (1 + 2));

        System.out.println("最大值是" + a);
		
1.2.3 自增自减运算符

自增运算符 ++

自减运算符 - -

格式:可以放在变量前面,也可以放在变量后面

区别:

  1. 对于单独使用,自增自减运算符放在变量前面和后面没有任何区别。
  2. 对于混合使用
    1. 如果++(–)符号在变量前面,那么会先将变量自身立刻加1(减1),然后根据加1(减1)之后的结果进行其他操作
    2. 如果++(–)符号在变量后面,那么会先进行其他操作,然后在进行加1(减1)
        int a  = 10;
        a++;
        System.out.println(a);

        int b = 10;
        ++b;
        System.out.println(b);

        int num1 = 10;
        // 以下代码干了2件事
        // 1.输出变量结果
        // 2.给num1加1
//        1. 如果++(--)符号在变量前面,那么会先将变量自身立刻加1(减1),然后根据加1(减1)之后的结果进行其他操作
//        2. 如果++(--)符号在变量后面,那么会先进行其他操作,然后在进行加1(减1)
        System.out.println(num1++);// 10
        System.out.println(num1);// 11

        int num2 = 10;
        System.out.println(++num2);//11
        System.out.println(num2);//11

        int num3 = 10;
        int result = num3++ + 1;
        System.out.println(result);// 11
        System.out.println(num3);// 11

        int x = 30;
        int y = 40;
        // 30 + 39
        int z = x++ + --y;
        System.out.println(x);// 31
        System.out.println(y);// 39
        System.out.println(z);// 69

        // 以下代码在运算完成之后,Java在底层会对结果做一个强制类型转换
        byte b1 = 3;
        b1++;
        System.out.println(b1);

拓展:

public static void main(String[] args) {
        int a = 10;
        int b;
        //理解为 a 被赋值时开辟了新的内存,之后老的 a 再自加 1 但与新的 a 已经无关
        a = a++;
        System.out.println(a);// 10
        b = a++;
        System.out.println(a);// 11
    }

1.3 赋值运算符

1.3 赋值运算符

赋值运算符代表一个动作,将右边的值交给符号左边的内容

分类:

  • =
  • +=
  • -=
  • *=
  • /=
  • %=
        // = 赋值运算符
        int num1 = 10;
        int num2 = num1;
        System.out.println(num1);
        System.out.println(num2);

        // 复合运算符
        // +=
        int a = 10;
        a += 20; // 相当于 a = a + 20;
        System.out.println("a的值是" +a);

        // -=
        a -= 5;// 相当于 a = a - 5;
        System.out.println("a的值是" + a);

        // *=
        a *= 10;// 相当于 a = a * 10;
        System.out.println("a的值是" + a);

        // /=
        a /= 5;// 相当于 a = a / 5;
        System.out.println("a的值是" + a);

        int b = 4;
        // d = 4 += 4 -= 4 *= 4;
        // d = 4 += 4 -= 16;
        // d = 8 -= 16
        // d = -8
        int d = b += b -= b *= b;
        System.out.println(d);// -8
        
        // 复合运算符默认底层有一个强制类型转换
        byte b1 = 10;
//        b1 = (byte) (b1 + 10);
        b1 += 10;// b1 = b1 + 10;

1.4 关系(比较)运算符

  • ==(相等) !=(不相等) > (大于) < (小于) >= (大于等于) <= (小于等于)
  • 关系运算符的结果都是boolean类型,要么是true,要么是false
public static void main(String[] args) {
        int a = 10;
        int b = 20;
        // 等于
        System.out.println(a == b);
        // 不等于
        System.out.println(a != b);
        // 大于
        System.out.println(a > b);
        // 小于
        System.out.println(a < b);
        // 大于等于
        System.out.println(a >= b);
        // 小于等于
        System.out.println(a <= b);
    }
  • 注意:关系运算符中的 == 不要误写成 =

1.5 逻辑运算符

  • 作用:逻辑运算符用于连接布尔类型的表达式。
  • 在java中不能写 3 < x < 6
  • 分类
    • 与: & 有false则false
    • 或: | 有true则true
    • 异或: ^ 相同则false,不同则true
    • 非: ! 取反 true则false,false则true
public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = 30;
        // 与 &   有false则false   并且
        // true & true
        System.out.println(a < b & a < c & b > c);

        // 或 |   有true则true   或者
        // true | false
        System.out.println(a < c | a > b | a > c);

        // 异或 ^   相同就是false,不同就是true
        // false ^ true
        System.out.println(a > b ^ a > c ^ b > c);

        // 非 ! 取反  true则false,false则true
        System.out.println(!(a > b));
    }
  • & | ^ 可以连接多个表达式 !只能连接一个表达式
补充:
1. & 和| 哪个优先级更高?

&的优先级高于 |

		// & 比 | 优先级高
        // true
        System.out.println(false & true | true);
        // true
        System.out.println(true | true & false);
2. && 和 &的区别(面试题)?

&&和&在结果上是完全一样的。只是&&的效率更高.

&&有短路效果:如果左边的表达式已经可以判断出最终的结果,那么右边的代码就不会执行.

        // 如果左边的表达式已经可以判断出最终的结果,那么右边的代码就不会执行.
        // false & true
        System.out.println(a > b && a < c);

        int num = 100;
        System.out.println(3 > 4 && ++num < 1000);
        System.out.println(num);  // 100 因为 && 左边的结果是false,右边的代码就不需要执行了 ++num根本没有执行

注意: || 和| 也是一样的效果,||也有短路效果

1.6 三元(三目)运算符

三元运算就是有三个元素参与的运算。

格式: 数据类型 变量名 = 判断条件 ? 表达式A : 表达式B;

判断条件必须是一个布尔值

如果条件结果是true,那么将表达式A赋值给变量。

如果条件结果是false,那么将表达式B赋值给变量。

        // 获取两个变量的最大值
        int a = 30;
        int b = 20;
        int max = a > b ? a : b;
        System.out.println("最大值是" + max);

1.7 练习

输入3个整数,获取这3个整数的最大值.

public static void main(String[] args) {
        // 练习:在控制台输入3个整数,获取3个整数的最大值
        Scanner scanner = new Scanner(System.in);
        System.out.println("请您输入三个整数:");
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = scanner.nextInt();
        // 先获取 a b 的最大值
        int max1 = a > b ? a : b;
        // 用c和ab的最大值进行比较
        int max = max1 > c ? max1 : c;
        System.out.println("最大值是" + max);
    }

2 键盘录入

获取用户通过键盘输入的整数。

格式

Scanner 变量名 = new Scanner(System.in);
int a = 变量名.nextInt();

3 package

package是java语言中的包机制,包本质上就是一个文件夹。package用来声明当前文件所在的包。

目的是为了方便程序的管理。

包名全部使用小写,中间用.隔开。一般包名都是公司域名的反写。

package声明包的代码必须在java文件的有效代码的第一行

import是java中的关键字,用来导入其他地方的包的文件。

4 流程控制语句

4.1 概述

在一个程序执行的过程中,各条语句的执行顺序对于程序的结果是有直接影响的。也就是说程序执行的流程对于结果有影响。

所以我们必须清楚每条语句的执行流程,而且我们可以通过流程控制语句来控制程序的执行顺序。

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

4.2 顺序结构

是程序中最基本最简单的流程控制,没有特点的语法结构,按照代码编写的先后顺序,依次执行。程序中大部分代码都是这样执行的。

public static void main(String[] args) {
        System.out.println("一天晚上");
        System.out.println("两个和尚");
        System.out.println("三更半夜");
        System.out.println("四处流浪");
        System.out.println("误入洞房");
    }

4.3 选择结构

4.3.1 概述
  • 选择结构也称之为分支结构

  • 选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,可以根据结果执行不同的代码。

  • Java语言中提供了两种选择结构的语句

    • if语句
    • switch语句
4.3.2 if语句

if语句分为三种格式

  • 格式一
if (关系表达式){
     语句体;
}

执行流程:

​ 首先判断关系表达式的结果是true还是false

​ 如果是true就执行语句体中的代码

​ 如果是false就不执行语句体中的代码

注意点:如果{}中只有一条代码,{}可以省略

public static void main(String[] args) {
        // 格式一
        System.out.println("晚上闲的没事在大街游荡");
        System.out.println("发现一个成人娱乐场所");
        int age = 19;
        if (age >= 18)  //判断是否成年
            System.out.println("刷身份证");


        System.out.println("回家睡觉...");
    }
  • 格式二
if (关系表达式){
    语句体1;
}else{
	语句体2;
}

执行流程:

​ 首先判断关系表达式看其结果是true还是false

​ 如果是true就执行语句体1

​ 如果是false就执行语句体2

public static void main(String[] args) {

        // true:男  false:女
        boolean sex = false;
        if (sex){
            System.out.println("去男老八快乐屋");
        }else {
            System.out.println("去女老八快乐屋");
        }
    }
  • 格式三
if (关系表达式1){
    执行语句1;
}else if (关系表达式2){
    执行语句2;
}else if (关系表达式3){
	执行语句3;
}
...
else{
	执行语句n;
}

执行流程:

​ 首先判断关系表达式1,看其结果是true还是false。

​ 如果是true,就执行语句1;然后if语句结束

​ 如果是false,继续判断关系表达式2是true还是false。

​ 如果是true,就执行语句2;然后if语句结束

​ 如果是false,就继续判断关系表达式3是true还是false。

​ 如果是true,就执行语句3;然后if语句结束

​ 如果是false,继续判断

​ …

​ 如果没有任何关系表达式为true,就执行else中的语句n

public static void main(String[] args) {
        // 结构三
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入您的年龄:");
        int age = scanner.nextInt();
        if (age >= 3 && age <= 7){
            System.out.println("爸爸妈妈去上班,我去幼儿园");
        }else if (age > 7 && age < 13){
            System.out.println("上小学,带红领巾");
        }else if (age >= 13 && age < 16){
            System.out.println("上初中,开始早恋");
        }else if (age >= 16 && age < 19){
            System.out.println("上高中,开始苦读");
        }else if (age >= 19 && age < 25){
            System.out.println("上大学,公开谈恋爱");
        }else {
            System.out.println("开始挣钱...");
        }
    }

4.4 练习

  • 用户输入一个整数,判断是奇数还是偶数
public static void main(String[] args) {
        // 用户输入一个整数,判断是奇数还是偶数
        /**
         * 获取用户输入的整数 Scanner
         * 偶数:如果对2取余,结果是0,就是偶数,否则就是奇数
         */
        Scanner scanner = new Scanner(System.in);
        int i = scanner.nextInt();
        if (i % 2 == 0){
            System.out.println("您输入的是一个偶数");
        }else {
            System.out.println("您输入的是一个奇数");
        }
    }
  • x和y的关系满足如下:
x >= 3    y= 2x +1
-1<x<3    y=2x;
x<=-1     y=2x - 1;

根据给定的x的值,计算出y的值并输出到控制台。

public static void main(String[] args) {
        // x >= 3    y= 2x +1
        // -1<x<3    y=2x;
        // x<=-1     y=2x - 1;
        // 创建Scanner
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入x的值");
        int x = scanner.nextInt();
        int y;
        if (x >= 3){
            y = 2 * x + 1;
        }else if(x > -1 && x < 3){
            y = 2 * x;
        }else{
            y = 2 * x - 1;
        }
        System.out.println("y = " + y);
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值