热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaSE从入门到放弃(三)的逻辑运算符详解

本文详细介绍了JavaSE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以JavaSE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。

Java SE从入门到放弃(三)


第一节:运算符


1. 逻辑运算符

1592970616871.png


  • 说明

& && | || ! ^说明:
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>> : 在一定范围内,每右移一位,数值 / 2"过犹不及">>> : 不管是正数还是负数,右移之后,高位都补0总结:我们在开发中使用位运算的机会不多。
具体说到如果使用的话,主要是为了提升运算的效率。经典的面试题:
最高效的方式计算 2 * 8 2 <<3
8 <<1

  • 举例

1592970714047.png

1592970731082.png

1592970743950.png


  • 代码演示

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);}
}

3. 三元运算符


  • 说明

格式: (条件表达式)? 表达式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);}
}

4. 运算符的优先级

1592970826425.png

了解即可,无须记忆!


第二节:流程控制


1. 流程控制介绍

1592989181075.png

在这里插入图片描述


2. 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("不嫁!");}}
}

3. 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);}
}

4. 获取随机数

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)}
}

5. 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;}
}

推荐阅读
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
author-avatar
窝窝六六柒柒巴巴
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有