day03
运算符
逻辑运算符
- 说明
& && | || ! ^
说明:
1. 逻辑运算符操作的都是boolean类型的变量
2. 逻辑运算符的运算结果也是boolean类型
- 代码演示
class LogicTest {
public static void main(String[] args) {
//& 和 &&相同点:当符号左边是true时,都执行符号右边的操作
//不同点:
//& : 当符号左边是false时,继续执行符号右边的操作
//&& : 当符号左边是false时,不再执行符号右边的操作
//& 与 && 表达的都是且的关系。但是,在开发中我们使用&&的频率高一些。
boolean b1 = true;
b1 = false;
int n1 = 10;
if(b1 & (n1++) > 0){
System.out.println("今天天气稍微闷热一些~");
}else{
System.out.println("明天预计天气稍微闷热一些~");
}
System.out.println("n1 = " + n1);
//#################################
boolean b2 = true;
b2 = false;
int n2 = 10;
if(b2 && (n2++) > 0){
System.out.println("今天天气稍微闷热一些~");
}else{
System.out.println("明天预计天气稍微闷热一些~");
}
System.out.println("n2 = " + n2);
//###############################
//| 和 || 相同点:当符号左边是false时,都执行符号右边的操作
//不同点:
//| : 当符号左边是true时,继续执行符号右边的操作
//|| : 当符号左边是true时,不再执行符号右边的操作
//| 与 || 表达的都是或的关系。但是,在开发中我们使用||的频率高一些。
boolean b3 = false;
b3 = true;
int n3 = 10;
if(b3 | (n3++) > 0){
System.out.println("今天天气稍微闷热一些~");
}else{
System.out.println("明天预计天气稍微闷热一些~");
}
System.out.println("n3 = " + n3);
//###################
boolean b4 = false;
b4 = true;
int n4 = 10;
if(b4 || (n4++) > 0){
System.out.println("今天天气稍微闷热一些~");
}else{
System.out.println("明天预计天气稍微闷热一些~");
}
System.out.println("n4 = " + n4);
}
}
位运算符
- 说明
<< >> >>> & | ^ ~
总结:
<< : 在一定范围内,每左移一位,数值*2
>> : 在一定范围内,每右移一位,数值 / 2
"过犹不及"
>>> : 不管是正数还是负数,右移之后,高位都补0
总结:我们在开发中使用位运算的机会不多。
具体说到如果使用的话,主要是为了提升运算的效率。
经典的面试题:
最高效的方式计算 2 * 8
2 << 3
8 << 1
- 代码演示
class BitTest {
public static void main(String[] args) {
System.out.println("13 << 2 : " + (13 << 2));
System.out.println("-13 << 2 : " + (-13 << 2));
System.out.println("13 << 27 : " + (13 << 27));
System.out.println("13 << 28 : " + (13 << 28));
System.out.println("13 >> 2 : " + (13 >> 2));
System.out.println("-13 >> 2 : " + (-13 >> 2));
System.out.println("-13 >>> 2 : " + (-13 >>> 2));
//练习:如何交换两个int型变量的值
int m = 10;
int n = 20;
System.out.println("m = " + m + ", n = " + n);
//交换两个变量的值(重点)
//方式一:推荐!
//int temp = m;
//m = n;
//n = temp;
//方式二:使用有局限性:① 可能会超出int的范围 ② 数据类型的局限性
//m = m + n;//10 + 20
//n = m - n;//30 - 20
//m = m - n;//30 - 10
//方式三:使用有局限性:数据类型的局限性
m = m ^ n;
n = m ^ n;
m = m ^ n;
System.out.println("m = " + m + ", n = " + n);
}
}
三元运算符
- 说明
格式: (条件表达式)? 表达式1 : 表达式2
说明1: ① 条件表达式的结果为boolean
② 如果条件表达式的结果为true,则返回表达式1。反之,如果条件表达式的结果为false,则返回表达式2
③ 表达式1和表达式2满足一致性。
说明2:三元运算符可以嵌套使用
说明3:凡是可以使用三元运算符的地方,都可以改写成if-else结构。反之,不成立。
凡是既可以使用三元运算符,又可以使用if-else结构的地方,建议使用三元运算符。因为执行效率高一些。
- 代码演示
class SanYuanTest {
public static void main(String[] args) {
//获取两个数的较大值
int m = 10;
byte n = 15;
int max = (m > n)? m : n;
System.out.println("较大值为:" + max);
//String s = 12;//编译不通过
String maxString = (m > n)? "m大" : "n大";
n = 10;
String maxString1 = (m > n)? "m大" : ((m == n)? "m和n相等" : "n大");
System.out.println(maxString);
System.out.println(maxString1);
//练习:获取三个数的最大值
int a = 10;
int b = 43;
int c = 5;
int max1 = (a > b)? a : b;
int max2 = (max1 > c)? max1 : c;//不建议: int max2 = (((a > b)? a : b) > c)? ((a > b)? a : b) : c;
System.out.println(max2);
}
}
流程控制
if-else结构
- 结构
结构一:
if(条件表达式){
执行代码块;
}
结构二:二选一
if(条件表达式){
执行代码块1;
}
else{
执行代码块2;
}
结构三:多选一
if(条件表达式1){
执行代码块1;
}
else if (条件表达式2){
执行代码块2;
}
……
else{
执行代码块n;
}
- 说明
1. if-else结构中的else是可选的。
2. 如果两个条件表达式是“互斥”关系,则哪个写在上面,哪个写在下面都可以。
如果两个条件表达式是有交集的关系,谁上谁下是有区别的。根据题目要求看哪个应该是声明在上面。
如果两个条件表达式是“包含”关系,通常将范围小的声明在范围大的上面。
3. 如果执行语句结构中只有一行执行语句,则执行语句所在的一对{}可以省略。
但是,不建议大家省略!
- 代码演示
//针对结构一:
int heartBeats = 80;
//另外:if(heartBeats >= 60 && heartBeats <= 100) 不能写成:if(60<=heartBeats<=100)
if(heartBeats < 60 || heartBeats > 100){
System.out.println("需要做进一步的检查");
}
System.out.println("体检结束");
//针对结构二:
int age = 20;
if(age < 18){
System.out.println("还未成年,可以多看看动画片");
}else{
System.out.println("可以看看动作片、战争片、...");
}
//针对结构三:
age = 150;
if(age < 0){
System.out.println("数据输入有误");
}else if(age < 6){
System.out.println("婴幼儿时期");
}else if(age < 13){
System.out.println("少年时期");
}else if(age < 35){
System.out.println("青壮年时期");
}else if(age < 55){
System.out.println("中年时期");
}else if(age < 140){
System.out.println("老年时期");
}else{
System.out.println("恭喜你,成仙儿了~");
}
- 代码演示
class IfTest1 {
public static void main(String[] args) {
//1. 从键盘获取岳小鹏的期末成绩
Scanner scanner = new Scanner(System.in);
System.out.println("请输入小月的期末成绩(0-100):");
int score = scanner.nextInt();
//2. 根据成绩做if-else判断
if(score == 100){
System.out.println("奖励一辆BMW");
System.out.println("奖励一辆BMW");
}else if(score > 80 && score <= 99){
System.out.println("奖励一台iphone xs max");
}else if(score >= 60 && score <= 80){
System.out.println("奖励一个 iPad");
}else{
System.out.println("什么奖励也没有");
}
}
}
- 代码演示
/*
大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件:
高:180cm以上;富:财富1千万以上;帅:是。
如果这三个条件同时满足,则:“我一定要嫁给他!!!”
如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。”
如果三个条件都不满足,则:“不嫁!”
*/
import java.util.Scanner;
class IfTest3 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入你的身高(cm):");
int height = scan.nextInt();
System.out.println("请输入你的财富值(单位:万):");
double wealth = scan.nextDouble();
/*
方式一:
System.out.println("请告诉我你是否帅?(true/false):");
boolean isHandsome = scan.nextBoolean();
if(height > 180 && wealth > 1000 && isHandsome){
System.out.println("我一定要嫁给他!!!");
}else if(height > 180 || wealth > 1000 || isHandsome){
System.out.println("嫁吧,比上不足,比下有余。");
}else{
System.out.println("不嫁!");
}
*/
System.out.println("请告诉我你是否帅?(是/否):");
String isHandsome = scan.next();
if(height > 180 && wealth > 1000 && "是".equals(isHandsome)){
System.out.println("我一定要嫁给他!!!");
}else if(height > 180 || wealth > 1000 || "是".equals(isHandsome)){
System.out.println("嫁吧,比上不足,比下有余。");
}else{
System.out.println("不嫁!");
}
}
}
Scanner的使用
//1.
import java.util.Scanner;
/*
需求:如何从控制台获取常见数据类型的变量
实现:使用Scanner类及其方法即可。
步骤:
1. 导包: import java.util.Scanner;
2. 在main方法中创建Scanner的实例: Scanner scan = new Scanner(System.in);
3. 调用Scanner的相关方法,获取不同类型的变量: next() \ nextInt() \ nextBoolean() \ ....
说明:
如果要求输入的类型与用户实际输入的类型不匹配的话,报异常:InputMismatchException
*/
class ScannerTest {
public static void main(String[] args) {
//2.
Scanner scan = new Scanner(System.in);
//3.
//3.1 获取String类型的变量
System.out.println("请输入你的姓名:");
String name = scan.next();
System.out.println("名字为:" + name);
//3.2 获取整型int型的变量
//获取其他整型:nextByte() / nextShort() / nextLong()
System.out.println("请输入你的年龄:");
int age = scan.nextInt();
System.out.println("年龄为:" + age);
//3.3 获取浮点型double型的变量
//获取其他浮点型:nextFloat()
System.out.println("请输入你的体重:");
double weight = scan.nextDouble();
System.out.println("体重为:" + weight);
//3.4 获取boolean类型的变量
System.out.println("请输入你是否已婚(true/false):");
boolean isMarried = scan.nextBoolean();
System.out.println("是否已婚:" + isMarried);
//3.5 获取char类型的变量
System.out.println("请输入你的性别(男/女):");
String gender = scan.next();//"男"
char charGender = gender.charAt(0);//charAt(index):获取index位置的字符
System.out.println("性别为:" + charGender);
}
}
获取随机数
class RandomTest {
public static void main(String[] args) {
//random():返回一个>= 0.0 且 < 1.0的double型值
double value = Math.random();
System.out.println(value);
//获取[0,100]范围内的随机数:
int score = (int)(Math.random() * 101); //[0,1) -> [0,101) -> [0,100]
System.out.println(score);
//获取[10,30]范围内的随机数:
int value1 = (int)(Math.random() * 21 + 10); // [0,1) -> [0,21) -> [10,31) ->[10,30]
//获取[a,b]范围内的随机数:(int)(Math.random() * (b - a + 1) + a)
}
}
switch-case结构
- 结构
switch(表达式){
case 常量1:
语句1;
// break;
case 常量2:
语句2;
// break;
… …
case 常量N:
语句N;
// break;
default:
语句;
// break;
}
- 说明
① switch中的表达式,可以是如下的一些数据类型:byte \ short \ char \ int \ 枚举类型(JDK5.0) \ String (JDK7.0)
② 根据switch中的表达式的值,依次匹配case中的常量。一旦匹配成功,则进入相应的case的执行语句中执行。并考虑执行后续
的case结构。直到遇到break或switch-case结构执行结束为止。
或
③ switch-case要想实现多选一的效果,需要使用break。
③ default 相当于if-else中的else结构。是可选的,位置也是灵活的
④ switch-case 实现的结构都可以转换为if-else。反之,不成立。
凡是既可以使用switch-case,又可以使用if-else结构的地方,建议使用switch-case。因为执行效率高一些。
- 代码演示
class SwitchTest {
public static void main(String[] args) {
int num = 2;
switch(num){
case 0:
System.out.println("Zero");
break;
case 1:
System.out.println("One");
break;
case 2:
System.out.println("Two");
break;//跳出当前的switch-case结构
case 3:
System.out.println("Three");
break;
case 4:
System.out.println("Four");
break;
default:
System.out.println("Other");
//break;
}
//##########################
String season = "summer1";
switch (season) {
case "spring":
System.out.println("春暖花开");
break;
case "summer":
System.out.println("夏日炎炎");
break;
case "autumn":
System.out.println("秋高气爽");
break;
case "winter":
System.out.println("冬雪皑皑");
break;
default:
System.out.println("季节输入有误");
break;
}
}
}
:
System.out.println(“Three”);
break;
case 4:
System.out.println(“Four”);
break;
default:
System.out.println(“Other”);
//break;
}
//##########################
String season = "summer1";
switch (season) {
case "spring":
System.out.println("春暖花开");
break;
case "summer":
System.out.println("夏日炎炎");
break;
case "autumn":
System.out.println("秋高气爽");
break;
case "winter":
System.out.println("冬雪皑皑");
break;
default:
System.out.println("季节输入有误");
break;
}
}