Java02 运算符&if

课程目标

1. 【理解】数据类型转换
2. 【掌握】五种运算符类型
3. 【掌握】数据录入
4. 【掌握】流程控制语句-IF语句

1. 类型转换

1.1 自动类型转换

把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。这种转换方式是自动的,直接书写即可。

double num = 10; // 将int类型的10直接赋值给double类型
System.out.println(num); // 输出10.0

1.2 强制类型转换

把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量。

强制类型转换格式

目标数据类型 变量名 = (目标数据类型)值或者变量;

示例

        byte a = 3;
        byte b = 4;

        // int c = a + b;//自动类型转为大的类型

        // 从大到小的转换:  强制类型转换
        // byte d = a + b;// 我不想提升为大的类型,我就想用byte,怎么办?

        /*
        * 强制类型转换
        *
        * 目标类型  变量名 = (目标类型)原始类型;
        *
        * 缺点: 会造成精度丢失问题
         *
        * */

        byte d = ( byte) (a + b);
        System.out.println(d);

 1.3 强制类型转换注意事项

char类型的数据转换为int类型是按照码表中对应的int值进行计算的。比如在ASCII码表中,'a'对应97。

整数默认是int类型,byte、short和char类型数据参与运算均会自动转换为int类型。

byte b1 = 10;
byte b2 = 20;
byte b3 = b1 + b2; 
// 第三行代码会报错,b1和b2会自动转换为int类型,计算结果为int,int赋值给byte需要强制类型转换。
// 修改为:
int num = b1 + b2;
// 或者:
//目标类型  变量名 = (目标类型)原始类型;
byte b3 = 	(byte) (b1 + b2);

boolean类型不能与其他基本数据类型相互转换。

2.运算符

2.1算数运算符

:+,-,*,/(除、取整),%(取余)

  • ==注意事项==

    /和%的区别:两个数据做除法,/取结果的商,%取结果的余数。

    整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。

2.2赋值运算符

:= , += , -= , *= , /= , %= 

赋值运算符隐含强制类型转换

面试题:
	short s=1;  s = s+1; 
	
	short s=1;  s+=1;

	上面两个代码有没有问题,如果有,那里有问题。
	
	为什么第二个木有问题呢?
		扩展的赋值运算符其实隐含了一个强制类型转换。
		
		s += 1;
		不是等价于 s = s + 1;
		而是等价于 s = (s的数据类型)(s + 1);

2.3自增自减运算符

: ++  , --,

  • ++和-- 既可以放在变量的后边,也可以放在变量的前边。

  • 单独使用的时候, ++和-- 无论是放在变量的前边还是后边,结果是一样的。

  • 参与操作的时候,如果放在变量的后边,先拿变量参与操作,后拿变量做++或者--。

  • 参与操作的时候,如果放在变量的前边,先拿变量做++或者--,后拿变量参与操作。

  • 最常见的用法:单独使用。

  • int x = 10;
    int y = x++ + x++ + x++;
    System.out.println(y); // y的值是多少?
    /*
    解析,三个表达式都是++在后,所以每次使用的都是自增前的值,但程序自左至右执行,所以第一次自增时,使用的是10进行计算,但第二次自增时,x的值已经自增到11了,所以第二次使用的是11,然后再次自增。。。
    所以整个式子应该是:int y = 10 + 11 + 12;
    输出结果为33。
    */
    注意:通过此练习深刻理解自增和自减的规律,但实际开发中强烈建议不要写这样的代码!小心挨打!

2.4关系运算符

:==(判断两端值是否相等),!= , > , >= , < , <=

  • 关系运算符的结果都是boolean类型,要么是true,要么是false。
  • 千万不要把“==”误写成“=”,"=="是判断是否相等的关系,"="是赋值。
int a = 10;
int b = 20;
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

// 关系运算的结果肯定是boolean类型,所以也可以将运算结果赋值给boolean类型的变量
boolean flag = a > b;
System.out.println(flag); // 输出false

2.5逻辑运算符:

& 逻辑与 | 逻辑或 ^ 异或 ! 非

逻辑短路运算符

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

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

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

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

2.6三元运算符表达式

数据类型 变量 = 关系表达式 ? 表达式 1 :表达式 2;

2.7Scanner

导包、创建对象、接收数据

3. 流程控制语句

3.1 顺序结构

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

执行流程图

 

3.2 分支结构(if )

if格式一

if (关系表达式) {
    语句体;	
}
  • 执行流程

    ①首先计算关系表达式的值

    ②如果关系表达式的值为true就执行语句体

    ③如果关系表达式的值为false就不执行语句体

    ④继续执行后面的语句内容

  •  

代码示例

public class IfDemo {
	public static void main(String[] args) {
		System.out.println("开始");	
		//定义两个变量
		int a = 10;
		int b = 20;	
		//需求:判断a和b的值是否相等,如果相等,就在控制台输出:a等于b
		if(a == b) {
			System.out.println("a等于b");
		}		
		//需求:判断a和c的值是否相等,如果相等,就在控制台输出:a等于c
		int c = 10;
		if(a == c) {
			System.out.println("a等于c");
		}		
		System.out.println("结束");
	}
}

格式二

if (关系表达式) {
    语句体1;	
} else {
    语句体2;	
}
  • 执行流程

    ①首先计算关系表达式的值

    ②如果关系表达式的值为true就执行语句体1

    ③如果关系表达式的值为false就执行语句体2

    ④继续执行后面的语句内容

代码示例

public class IfDemo02 {
	public static void main(String[] args) {
		System.out.println("开始");		
		//定义两个变量
		int a = 10;
		int b = 20;
		//需求:判断a是否大于b,如果是,在控制台输出:a的值大于b,否则,在控制台输出:a的值不大于b
		if(a > b) {
			System.out.println("a的值大于b");
		} else {
			System.out.println("a的值不大于b");
		}		
		System.out.println("结束");
	}
}

if格式三

 

if (关系表达式1) {
    语句体1;	
} else if (关系表达式2) {
    语句体2;	
} 
…
else {
    语句体n+1;
}

  • 执行流程

    ①首先计算关系表达式1的值

    ②如果值为true就执行语句体1;如果值为false就计算关系表达式2的值

    ③如果值为true就执行语句体2;如果值为false就计算关系表达式3的值

    ④…

    ⑤如果没有任何关系表达式为true,就执行语句体n+1。

 

代码示例

import java.util.Scanner;
public class IfDemo03 {
	public static void main(String[] args) {
		System.out.println("开始");
		// 需求:键盘录入一个星期数(1,2,...7),输出对应的星期一,星期二,...星期日
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个星期数(1-7):");
		int week = sc.nextInt();
		if(week == 1) {
			System.out.println("星期一");
		} else if(week == 2) {
			System.out.println("星期二");
		} else if(week == 3) {
			System.out.println("星期三");
		} else if(week == 4) {
			System.out.println("星期四");
		} else if(week == 5) {
			System.out.println("星期五");
		} else if(week == 6) {
			System.out.println("星期六");
		} else if(week ==7){
			System.out.println("星期日");
		}else{
            System.out.println("你个二x,我们只有星期一到星期日,请回到地球!!!!");
        }	
		
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值