JavaSE_基础篇-part03

Java基础第三篇

今日任务

1、比较运算

2、逻辑运算

3、三元运算符

4、程序运行流程&顺序结构

5、判断结构(if)

6、多分支结构(switch )

7、Scanner对象的使用

运算符

学习运算的原则:知道每类运算的运算符号,以及符号的运算规则。

在生活中,存在各种各样的数据运算,例:加、减、大于(>)、小于(<)
Java中的运算:
目的就是为了解决生活中的问题,就需要把生活中的所有常见的运算移植到Java中。

Java中的运算:
算术运算、赋值运算、比较运算(关系运算)、逻辑运算、三元运算符。

1、比较运算

比较运算:就是我们数学中的比较大小。
运算符号:

=(大于等于) <<=(小于等于)
==(相等)[千万不要和赋值混淆] !=(不相等)

==表示的是左右两边是否相等。如果相等结果为true,不等结果false
= 在Java中称为赋值号。

注意:比较运算的结果一定是boolean值。

在这里插入图片描述

2、逻辑运算

在数学中有命题的真假。或 且(和、与) 非运算。
逻辑运算:就是针对上面介绍的或 且 非运算。
数学中的逻辑:
int i=3;
2<i<5
在java中不能像数学中那样去写,必须分开两个表达式。
i>2 i<5 他们的中间就用逻辑运算符连接。

2.1、逻辑运算符号

Java中的逻辑运算符:要求两侧的运算类型必须是boolean类型。逻辑运算符就是把多个boolean类型的值连接在一起。
双与(短路与)&& 单与 & (逻辑与)
双或(短路或)|| 单或 |(逻辑或)
异或 ^ 非 !

2.2、运算规律

逻辑运算符号:
1)与运算规则:
与运算:当两侧都为true的时候,结果才为true。否则结果为false。
(一假即假)
true 与 true = true
false 与 true = false
true 与 false = false
false 与 false = false
举例:

class Demo5 
{
    
    
	public static void main(String[] args) 
	{
    
    
		boolean flag1=10>1;//true
		boolean flag2=10<1;//false
		boolean flag3=10>5;//true
		boolean flag4=10<5;//false
		//true&&true------>true。
		System.out.println(flag1&&flag3);
		//false&&true------>false。
		System.out.println(flag2&&flag3);
		//true&&false------>false。
		System.out.println(flag1&&flag2);
		//false&&false------>false。
		System.out.println(flag2&&flag4);
	}
}
注意:单与(&)和双与(&&)的区别:
		双与(&&):它在进行运算的时候,当左侧为false的时候,右侧不会参与运算。
		单与(&) :它在进行运算的时候,不管左边是什么,右边都要运算。

一定记住:只要是与运算(不管&还是&&)都是对false敏感。
所谓的一假即假

2)或运算原则:
或运算:当两侧都为false的时候,结果才为false。否则结果为true。
(一真即真)
true 或 true = true
false 或 true = true
true 或 false = true
false 或 false = false
举例:

class Demo5 
{
    
    
	public static void main(String[] args) 
	{
    
    
		boolean flag1=10>1;//true
		boolean flag2=10<1;//false
		boolean flag3=10>5;//true
		boolean flag4=10<5;//false
		//true||true------>true。
		System.out.println(flag1||flag3);
		//false||true------>true。
		System.out.println(flag2||flag3);
		//true||false------>true。
		System.out.println(flag1||flag2);
		//false||false------>false。
		System.out.println(flag2||flag4);
	}
}

单或和双或的区别:
||:当左边为true的时候,右侧的不参与运算。
|:不管左边是什么结果,右侧都要运算。

一定记住:只要是或运算(不管|还是||)都是对true敏感。
所谓的一真即真

3)^逻辑异或:
两侧相同,结果为false;两侧不同,结果为true。
true ^ true = false
false ^ true = true
true ^ false = true
false ^ false = false
总结:相异为真;异或,追求的是“异”!

4)!非运算:
非true 为false ,非false 为 true

在这里插入图片描述

3、三元运算符

3.1 三元运算符的格式

三元运算:三目运算。
格式:
条件表达式1 ? 表达式2 : 表达式3;

3.2 三元运算符的运算原则

要求条件表达式1 运行的结果必须是一个boolean的结果。通过条件表达式1的这个结果确定到底是执行表达式2,还是表达式3.
当条件表达式1为true,就执行表达式1 注意:不会执行表达式2
当表达表达式1为false,就执行表达式2 注意:不会执行表达式1

注意:三元运算符运算后必须有结果。

3.3 三元运算符举例

三元运算练习:

比较两个数的大小,并打印出最大数的值。

class Demo3 
{
    
    
	public static void main(String[] args) 
	{
    
    
		/*
			利用三元运算算出最大值
		*/
		//定义变量
		int a=3;
		int b=5;
		int max;
		max=a>b ? a:b;
		System.out.println(max);
	}
}

在运行上面程序的时候,JVM遇到了三元运算,这时JVM 会先执行 a > b 这个表达式,3 > 5不成立
这时JVM 就会把变量b=5的结果作为三元运算的结果,赋值给max

4. 程序运行流程&顺序结构

程序的执行顺序:
书写的.java文件,称为Java的源代码(源程序)。
源代码需要使用JDK 中提供的 javac 命令进行编译。在dos窗口中输入的javac 源文件名.java 这时是在启动编译器,然后让编译器去检查当前的源代码有没有语法错误。没有语法错误,就会生成class文件。

然后我们在dos窗口中输入java class文件名 这时会启动JVM。启动JVM之后,JVM会在我们的内存中划分出空间,来运行当前的Java程序。JVM会先把硬盘上的class文件加载到内存划分好的空间中。JVM开始在当前这个class文件中找main方法运行。然后开始运行main方法。

在main方法中:开始执行main方法中的代码,从上往下逐行执行。在执行的过程中,JVM遇到不同的关键字,需要做不同的事情。
程序是按照顺序结构在执行。

注意:程序在执行的过程中,不可能完全按照行的方式,每行都执行。在执行的过程中,应该加入一些复杂的条件,保证在满足的情况下,执行某些动作或者命令,如果不满足,就跳过执行其他的程序或者还有一种情况就是重复的一直执行某块代码。

5.判断结构(if)

程序在执行的过程中,需要加入一些条件,然后根据条件的真假,确定应该执行哪些代码,不应该执行哪些代码, 要完成这个需求,就必须使用Java中的判断结构。

5.1、if判断第一种格式

if( 判断的条件)
{
判断成立后应该执行的动作;
}
注意: 这里的判断条件最后必须是一个boolean值,如果判断条件是true,则执行if后面的{}中的内容;如果判断条件是false,则跳过大括号中的内容,向下继续执行其他内容。

案例:判断一个整数是偶数还是奇数

在这里插入图片描述

5.2if判断第二种格式

if( 判断的条件 )注意: 这里的判断条件最后必须是一个boolean值,如果判断条件是true,则执行if后面的{}中的内容;如果判断条件是false,则跳过大括号中的内容,执行else后面的大括号中的内容。

{
判断条件成立后执行的语句;
}
else //注意:只有当if的条件不成立时,才会执行else
{
判断不成立后执行的语句;
}

执行顺序:当JVM遇到 if else 结构的判断时,会先执行if的条件,如果if条件成立就执行if后面的语句,如果if的条件不成立,就自动的去执行else 的语句。

注意:如果if成立了,执行完if后面的语句之后,直接跳过else,不会执行else后面大括号中的内容,而是往下继续执行。

案例:比较两个数的大小。

class IfElseDemo 
{
    
    
	public static void main(String[] args) 
	{
    
    
		//if else  举例
		
		int a = 3;
		int b = 6;
		//假设不考虑 a 和 b 相等的情况

		if( a > b )
		{
    
    
			System.out.println("a大于b");
		}
		else
		{
    
    
			System.out.println("b大于a");
		}

		System.out.println("Hello World!");
	}
}

在这里插入图片描述

注意:else 的语句执行时间是if判断的条件不成立时。else不需要书写条件。
在程序中只要有else,必然上方有if条件,但是有if条件,就不一定有else 了。

练习一:
大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件: 高:180cm以上;富:财富1千万以上;帅:是。
如果这三个条件同时满足,则:“我一定要嫁给他!!!”
如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。”
如果三个条件都不满足,则:“不嫁!”

提示:
System.out.println(“身高: (cm))
scanner.nextInt();
System.out.println(“财富: (千万))
scanner.nextDouble();
System.out.println(“帅否: (true/false)) (是/否)
scanner.nextBoolean();

练习二:
模拟一个购物系统,通过键盘输入:单价,数量,付款金额;
最后计算得到应收金额和找零;
单价:price
数量:amount
支付金额:money

总金额:totalPrice
找零:change

附加需求:满500元打8折

5.3三元运算符可以简化if-else格式

三元运算它属于运算表达式,要求运算后必须有一个明确的结果出现。
if-else 属于Java中的语句,它执行完,可以没有具体的结果。
只有当if-else结果执行之后,有一个具体的结果的时候,可以使用三元运算代替。

练习:找出2个数中的最大值,并将最大值的结果输出打印出来。

class IfElseDemo2 
{
    
    
	public static void main(String[] args) 
	{
    
    
		/*
			三元运算和if else的区别
		*/
		//比较两个数的大小
		int a=3;
		int b=6;
		int max;
		//不考虑a和b相等的情况
		//三元运算算法
		max=a > b ? a:b;
		//if-else结构
		/*if(a>b){
			max=a;
		}else{
			max=b;
		}*/
		System.out.println("max="+max);
	}
}


结论:
if-else语句和三元运算符的区别:
三元运算符中必须有一个接收表达式结果的变量,而if-else语句中不一定要有接收表达式结果的变量。

5.4 if判断第三种格式

当在程序中有多个条件的时候,每个if只能列出其中的一种可能条件,这时在else中就会隐含其他的所有条件,对剩余的条件,还要进行更加具体的细化,这时可以在else 后面继续使用if,区分出其他的各种情况
if( 判断的条件 )
{
判断成立后执行的语句;
}
else if( 判断的条件 )
{
判断成立后执行的语句;
}
else if( 判断的条件 )
{
判断成立后执行的语句;
}
else if( 判断的条件 )
{
判断成立后执行的语句;
}
else if( 判断的条件 )
{
判断成立后执行的语句;
}

else
{
上述的所有判断都不成立之后执行的语句;
}

在这里插入图片描述

练习:
从键盘输入小明的期末考试成绩
当成绩为100分时,奖励一辆BMW;
当成绩为(80,99]时,奖励一台iphone6s;
当成绩为[60,80]时,奖励一本参考书;
其它时,暴打一顿!!

5.5 if-elseif练习

需求:对学生的成绩进行划分等级
90~100 -----》 A
80~89 -----》B
70~79 -----》C
60~69 -----》D
0~59 -----》E
int x=98
x>=90 && x<=100
分析:
1、有一个成绩,就需要一个变量先保存这个成绩
2、题目要求对成绩进行不同区间的划分,划分区间就需要使用比较运算结合 逻辑运算完成
3、由于有多个区间,并且输出的内容都不一样,这时就需要使用if对这些区间进行逐一的区分
可以使用if esle if else 结构
4、在哪个if判断成立之后,就输出对应的等级
步骤:

1、定义变量,保存成绩
2、使用判断进行区分
3、判断成立打印等级

/*
需求:对学生的成绩进行划分等级
		90~100 -----》 A
		80~89 -----》B
		70~79 -----》C
		60~69 -----》D
		0~59 -----》E

		1.定义一个变量,并且给变量赋值。
		2.划分分数区间
*/
class IfElseDemo3 
{
    
    
	public static void main(String[] args) 
	{
    
    
		//定义变量
		int score=67;
		//划分区间
		if(score>=90 && score<=100)
		{
    
    
			System.out.println("A");
		}else if(score>=80 && score<=89){
    
    
			System.out.println("B");
		}else if(score>=70 && score<=79){
    
    
			System.out.println("C");
		}else if(score>=60 && score<=69){
    
    
			System.out.println("D");
		}else{
    
    
			System.out.println("E");
		}

		System.out.println("Hello World!");
	}
}

7. 多分支结构/选择结构(switch )

7.1、switch语句格式

	switch( 表达式 )  
{
    
    
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
case 常量3:
语句3;
break;
case 常量4:
语句4;
break;
........
default :
语句;
break;
}

要求这个表达式最后必须能计算出一个准确的结果,并且这个结果的类型只能是 byte short int char ,在JDK5 增加了 枚举类型 在JDK7增加了字符串类型。
break的作用是结束switch语句,跳出switch语句。

7.2、代码演示

//演示Switch的执行过程
class SwitchDemo 
{
    
    
	public static void main(String[] args) 
	{
    
    
		int a = 4;

		switch( a % 2 )
		{
    
    
			case 0:
				System.out.println("a是偶数");
				break;
			case 1:
				System.out.println("a是奇数");
								break;
			default:
				System.out.println("没这样的奇偶数");
				break;
		}
		System.out.println("Hello World!");
	}
}

7.3、switch语句执行顺序

在这里插入图片描述

switch语句在执行的时候,JVM是通过switch中的表达式的计算结果和case后面的常量进行比较,相等就代表找到的执行switch后面case的入口,这时如果程序没有break关键字,JVM就会把从入口开始往下的所有代码,全部执行,而不管下面的case 后的常量是否和计算的结果一致。

7.4、switch练习

/*
	需求:根据指定的天数,打印星期。
*/
class SwitchTest
{
    
    
	public static void main(String[] args) 
	{
    
    
		int day=5;
		switch(day){
    
    
			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;
				
		
		}
		System.out.println("Hello World!");
	}
}

7.5使用switch语句时需要注意的事项:

1、在switch语句中case语句和default语句在书写上没有先后顺序。但是,会先执行case语句
2、switch语句只有遇到两个情况才会结束整个switch语句。1:遇到break语句; 2:执行到整个switch语句的末尾(switch语句匹配的最后的右大括号)
3、在switch语句中,是可以省略default语句的,而且default语句中的break同样也是可以省略的(前提:default语句必须书写switch语句的最后一个)

4、在switch语句的书写上,是可以省略break语句的。但是在执行时,如果没有break语句,程序会向下继续执行可执行的代码

自己总结:
1.根据变量的值,选择相应的case去判断,一旦满足case条件,
就执行case的相应语句。如果没有break,会继续执行其下的case语句。(case穿透)
2.default:是可选的,而且位置是灵活的。
3.变量可以是哪些类型?char、byte、short、int、枚举、String(jdk1.7)
4.case 条件:其中条件只能是值(常量),不能取值范围!

7.6、if和switch的区别

if和switch可以互换,但是if它主要完成的条件的判断,switch主要是对数据的结果分支执行。
if可以在条件中书写判断的区间,而switch只能接受固定类型的数据,最后还要求必须是常量。

练习一:
根据指定月份,打印该月份所属的季节
3,4,5为春季 6,7,8为夏季
9,10,11为秋季 12,1,2为冬季
用switch-case完成需求

练习二:
从键盘上读入一个学生的成绩,存放在变量score中
根据score的值输出其对应的成绩等级

score>=90 等级:A
70<=score<90 等级:B
60<=score<70 等级:C
score<60 等级:D

练习三:
对学生成绩大于60分的,输出"合格"。低于60分的,输出"不合格"。

练习四:
输入年份和月份,得到该月的天数

提示:判断标准如果满足year % 4 == 0 && year % 100 != 0 或者 year % 400 == 0任何一个
就是闰年

8、Scanner对象的使用

作为扩充内容,主要学习到之后课程(面向对象)的时候会详细讲;

Scanner的作用:从键盘读入数据(小数、整数、布尔、字符串…)到程序中;
注意:没有获取字符的方法

这里记住4个步骤就行了:

①.导包
Import java.util.Scanner;

②.创建Scanner类的对象
Scanner sc = new Scanner(System.in);

③.通过Scanner类的对象从键盘获取值
以获取整数值为例:
sc.nextInt();

④.关闭Scanner对象
sc.close();
具体代码参见下图:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_56368068/article/details/120123460
今日推荐