第三章 Java程序选择语句

本文详细介绍了Java中的关系运算符、逻辑运算符及其区别,如&&与||,以及三元运算符的使用。讲解了程序流程控制中的选择结构,包括if、if-else与多重if-else,并展示了如何使用Scanner类从键盘获取输入。此外,还涵盖了进制转换、位运算符和枚举的概念。文章通过实例和流程图帮助读者深入理解这些概念。
摘要由CSDN通过智能技术生成

目录

关系(比较)运算符

逻辑运算符

规律:

&和&&的区别:

相同点:

不同点:

|和||的区别:

相同点:

不同点:

程序流程控制

选择(分支)结构

if结构

if-else结构

流程图:

多重if-else结构

 

Scanner的使用

案例:

选择结构-switch-case

格式如下:

说明:

三元运算符

案例:

三元运算符与if-else的转换

运算符的优先级

进制(了解)

概述

原码反码补码

总结:

进制转换

十进制转二进制:

二进制转十进制:

位运算符

移位运算符

枚举


关系(比较)运算符

比较运算符

说明

范例

结果

==

相等于

4 == 3

false

!=

不等于

4 != 3

true

<

小于

4 < 3

false

>

大于

4 > 3

true

<=

小于等于

4 <= 3

false

>=

大于等于

4 >= 3

true

instanceof

检查是否是类的对象

“hello” instanceof String

true

  • 比较运算符的结果都是boolean类型的,也就是要么是true,要么是false
  • 比较运算符”==”不能误写成”=”

逻辑运算符

  • 逻辑与:& 逻辑或:| 逻辑非:! 逻辑异或:^
  • 短路与:&& 短路或:||

a

b

a&b

a&&b

a|b

a||b

!a

a^b

true

true

true

true

true

true

false

false

true

false

false

false

true

true

false

true

false

true

false

false

true

true

true

true

false

false

false

false

false

false

true

false

规律:

  1. 与:两边都是true时结果才是true
  2. 或:两边有一个是true时结果就是true
  3. 非:就是取反
  4. 异或:两边相同时结果是false,不同时结果是true

&和&&的区别:

  • 相同点:

    • 运算结果都相同

    • 左边是true时,都会执行右边的表达式

  • 不同点:

    •  当左边是false时,&会继续执行右边的表达式,而&&则不会执行右边的表达式

开发中推荐使用&&。

|和||的区别:

  • 相同点:

    • |和||的结果相同
    • 相同点2:当左边的结果是false时,|和||都会执行右边的表达式
  • 不同点:

    • 当左边的结果是true时,|会执行右边的表达式,而||不会执行右边的表达式

开发中推荐使用||。

class LogicTest{
	public static void main(String[] args){
		boolean b1 = true;
		int num1 = 5;
		
		if(b1 | (num1++ > 0)){
			System.out.println("张三");
		}
		System.out.println(num1);
		
		boolean b2 = true;
		int num2 = 5;
		
		if(b2 || (num2++ > 0)){
			System.out.println("李四");
		}
		System.out.println(num2);
	}

程序流程控制

  1. 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块
  2. 流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:
    • 顺序结构
      1. 程序从上到下逐行地执行,中间没有任何判断和跳转
    • 分支(选择)结构
      1. 根据条件,选择性地执行某段代码
      2. 有if-else和switch-case两种分支语句
    • 循环结构
      1. 根据循环条件,重复性的执行某段代码
      2. 有while、do-while、和for三种循环语句
      3. 注:JDK5提供了foreach循环,方便遍历集合、数组元素

选择(分支)结构

if结构

if(条件表达式){
	执行代码块;
}

if-else结构

if(条件表达式){
	执行代码块1;
}else{
	执行代码块2;
}

流程图:

  • 菱形:用来做判断的
  • 矩形:普通的要执行的代码
  • 圆圈:表示结束
  • 开始:由一个小的矩形表示

多重if-else结构

if(条件表达式1){
	执行代码块1;
}
else if(条件表达式2){
	执行代码块2;
}
...
else{
	执行代码块n;
}

 

Scanner的使用

案例:

/*
	Scanner可以用来从键盘获取数据
	具体实现步骤:
	1. 导包:import java.util.Scanner
	2. Scanner的实例化:Scanner scan = new Scanner(System.in);
	3. 调用Scanner类的相关方法,来获取指定类型的数据
*/
import java.util.Scanner;

class ScannerTest{
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		int num = scan.nextInt();
		System.out.println(num);
		
		System.out.println("请输入你的姓名:");
		String name = scan.next();
		System.out.println(name);
		
		System.out.println("请输入你的年龄:");
		int age = scan.nextInt();
		System.out.println(age);
		
		System.out.println("请输入你的工资:");
		double salary = scan.nextDouble();
		System.out.println(salary);
		
		System.out.println("请问你是否结婚:(true/false)");
		boolean isMarried = scan.nextBoolean();
		System.out.println(isMarried);
	}
}

选择结构-switch-case

格式如下:

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

说明:

/*
	1. 根据switch表达式中的值,依次匹配各个case中的常量。
		一旦匹配成功,则进入相应的case结构中,调用其执行语句;
		当调用完执行语句后,则仍然继续向下执行其他的case结构中的语句,
		直到遇到break关键字或者switch-case语句末尾结束为止。
	2. break关键字,可以使用在switch-case结构中,表示一旦执行到此关键字,
		就跳出switch-case结构。
	3. switch结构中的表达式,只能是如下的6种数据类型之一:
		byte、short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)
	4. case后面只能声明常量,不能是一个范围	
	5. break关键字是可选的
	6. default:相当于if-else中的else
		default是可选的,位置是灵活的
	
*/

三元运算符

  1. 格式:(条件表达式)?表达式1:表达式2;

说明:条件表达式为true,运算后的结果是表达式1;否则是表达式2.

  1. 表达式1和表达式2为一致的类型
  2. 三元运算符与if-else的联系与区别:
    1. 三元运算符可以简化if-else语句
    2. 三元运算符要求必须返回一个结果
    3. if后的代码块可以有多个语句
  3. 三元运算符可以嵌套使用

案例:

class SanYuanTest{
	public static void main(String[] args){
		//获取两个数的最大值
		int m = 15;
		int n = 10;
		int max = (m > n) ? m : n;
		System.out.println("最大值是:" + max);
		
		//(m > n) ? m : "n比较大";//两个表达式的类型不一致,没法接收结果
		
		String maxStr = (m > n) ? "m大" : ((m == n) ? "m和n相等" : "n比较大");
		System.out.println(maxStr);
		
		//获取三个数的最大值
		int m1 = 12;
		int m2 = 25;
		int m3 = -16;
		
		int max1 = (m1 > m2) ? m1 : m2;
		int max2 = (max1 > m3) ? max1 : m3;
		System.out.println("三个数的最大值是:" + max2);
	}
}

三元运算符与if-else的转换

  1. 凡是使用三元运算符的地方,都可以改写为if-else;反之,不成立。if-else中可以写的比较复杂,而三元运算符只是个简单的运算符。(比如上面案例中类型不一致的情况,就可以用if-else搞定)
  2. 如果一段程序既可以使用三元运算符又可以使用if-else,推荐使用三元运算符。原因:三元运算符简单、执行效率高。

运算符的优先级

  1. 运算符有不同的优先级,所谓的优先级就是表达式运算中的运算顺序。
  2. 只有单目运算符、三元运算符、赋值运算符是从右向左运算的。
  3. 运算符优先级是有一张表的,不推荐大家死记。简单来说,大家在写代码的过程中,如果想要某个表达式优先计算,加个小括号就可以了。

 

进制(了解)

概述

  1. 所有数字在计算机底层都以二进制的形式存在
  2. 对于整数,有四种表示方式:
    1. 二进制(binary):0,1,满2进1.以0b或0B开头
    2. 十进制(decimal):0-9,满10进1
    3. 八进制(octal):0-7,满8进1.以数字0开头表示
    4. 十六进制(hex):0-9及A-F,满16进1.以0x或0X开头表示。此处的A-F不区分大小写
public class Demo2 {
	public static void main(String[] args) {
		
		int num1 = 0b10; //二进制
		int num2 = 10; //十进制
		int num3 = 010; //八进制
		int num4 = 0x10; //十六进制
		
		//输出之后,都是以十进制来显示数据
		System.out.println("num1:" + num1);
		System.out.println("num2:" + num2);
		System.out.println("num3:" + num3);
		System.out.println("num4:" + num4);
	}
}

 

原码反码补码

在二进制中怎样表示正数和负数呢?

我们将最高位作为符号位,最高位是0,表示正数,最高位是1,表示负数。

 

二进制的整数有三种形式:原码、反码和补码。

  • 原码:直接将一个数值转换成二进制数。最高位是符号位。
  • 正数的原码、反码、补码都相同
  • 负数的反码:是对其原码按位取反,只是最高位(符号位)确定为1.
  • 负数的补码:其反码加1.
  • 计算机是以二进制补码的形式保存所有的整数。

总结:

  1. 二进制整数有三种表示形式:原码、反码和补码
  2. 计算机中是以补码的方式来存储数据的
  3. 正数的原码和补码相同
  4. 负数的补码需要经过反码来进行计算(先将该负数对应的正数用二进制表示出来,然后将最高位变为1,然后对其它各个位取反得到反码,然后反码加1就会得到补码,那这个补码就是该负数在计算机中的存储形式。)
  5. 当给定一个二进制的负数的时候,如果没有明确说明,那这个给定的负数指的是某个数的补码。我们可以推算出它到底表示的是几。(是一个逆过程,将该补码减一得到反码,然后对除符号位外各个位取反得到原码,那这个原码就是该负数所表示的实际的数字)

进制转换

十进制转二进制:

将十进制的数不断的的除以2,得到各个余数,然后将余数倒着写回去即是转为的二进制表示形式。

二进制转十进制:

从左边第一位数乘以2的n-1次方(幂),n代表该数字从右到左数起的位数。

比如:二进制的数 1010,转十进制的时候这么计算:1*2^3 + 0 *2^2 + 1*2^1 + 0*2^0 = 10

位运算符

位运算符

描述

范例

&

与运算

6 & 3 = 2

|

或运算

6 | 3 = 7

^

异或运算

6 ^ 3 = 5

~

取反运算

~6 = -7

移位运算符

移位算符

描述

范例

<<

左移,每左移1位就相当于在原来的基础上乘以2

3 << 2 = 12

>>

右移,每右移1位就相当于在原来的基础上除以2

右移之后,空出来的位用0补,但是最高位之前是多少,就还是多少。

3 >> 1 = 1

>>>

无符号右移,不论最高位是几,空出来的位都是拿0来补

3 >>> 1 = 1

枚举

枚举的意思就是有限个、确定的东西。

比如,一周的天数就是枚举,周一、周二。。。周日

比如,性别也是枚举,男、女

比如,一年的下雨量,就不能是枚举了,因为不确定么。

 

Java中定义枚举用的关键字是enum。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值