Java的运算符和程序逻辑控制你了解吗
作者:蔡欣致 发布时间:2023-01-19 10:01:59
运算符
运算符,顾名思义就是用来执行数学运算的。在Java中运算符可以分为:算术运算符、关系运算符、逻辑运算符、位运算符、移位运算符、条件运算符等。
算术运算符
基本四则运算符(+ - * / %)
这里与C语言基本一致,但是还要记住的是:1. 都是二元运算符,使用时必须要有左右两个操作数;2. int / int结果还是int类型,而且会向下取整。
增量运算符(+= -= *= /= %=)
这种类型运算符操作完成后,会将操纵的结果赋值给左操作数(与C语言类似)。
注意:只有变量才能使用该运算符,常量不能使用。
自增/自减运算符(++ --)
这里也是和C语言相同的,前置++是先+1,然后再再使用变量+1之后的值;后置++是先使用变量原来的值,表达式结束时再给变量+1,前置--/后置--也是类似的。
注意:只有变量才能使用自增/自减运算符,常量是不能够使用的,因为常量是不允许被修改的。
关系运算符
关系运算符主要有以下几个:== != < > <= >=,他们在进行计算后会得出的结果是true/false(也就是布尔类型)
其中有一点值得注意的是:当需要进行多次判断的时候
public class TestDemo {
public static void main(String[] args) {
int a=4;
if(3<a<5){
System.out.println(a);
}
}
}
是不能够像上面的这段代码那样连着写的,这样会报错,而应该像下面的代码一样:
public class TestDemo {
public static void main(String[] args) {
int a=4;
if(3<a&&a<5){
System.out.println(a);
}
}
但是上面这段在Java中错误的代码,在C语言中却不会报错,在C语言中是会先判断3是否小于a,发现确实是小于,泽会将其变为1,再判断1是否小于5,发现是就直接执行了这个if语句。但是计算机中这样的执行方式肯定是和我们元本的意愿是不符符,所以从这个方面又可以看出Java相对C语言安全性是更高的(因为Java在这个时候会就直接报错)。
逻辑运算符
逻辑运算符在所有运算符里面算得上是比较重点的,其中,逻辑运算符主要有三个:&& || !,其运算结果都是布尔类型(true/false)。
逻辑与(&&)
语法是:布尔表达式&&布尔表达式(注意:左右表达式应该都是布尔类型)
与C语言相同:
1. 只有两个表达式都为真,结果才为真;两表达式只要有一个是假,那结果就是假。
2. 遵循短路求值:如果左侧表达式为假,那么结果就一定是假,不会计算右侧的表达式。
与C语言不同:单纯使用&时,如果表达式结果为布尔类型,也可以表示逻辑与,但是不会遵循短路求值。
public class TestDemo {
public static void main(String[] args) {
int a=10;
System.out.println(a>20 & a/0 == 0); //err
}
}
逻辑或(||)
语法是:布尔表达式||布尔表达式(注意:左右表达式应该都是布尔类型)
与C语言相同:
1. 两表达式只要有一个是真,那结果就是真;只有两个表达式都为假,结果才为假。
2. 遵循短路求值:如果左侧表达式为真,那么结果就一定是真,不会计算右侧的表达式。
与C语言不同:单纯使用|时,如果表达式结果为布尔类型,也可以表示逻辑或,但是不会遵循短路求值。
public class TestDemo {
public static void main(String[] args) {
int a=10;
System.out.println(a<20 | a/0 == 0); //err
}
}
逻辑非(!)
语法是:!表达式
与C语言相同:真变假,假变真。
位运算符
我们知道字节是最小的存储单位,Java也不例外,在Java中数据存储的最小单位是字节,而数据操作的最小单位是比特位。其每个字节是由8个二进制比特位组成的,多个字节组合在一起可以表示各种不同的数据。
位操作表示按二进制位运算。计算机中都是使用二进制来表示数据的(01构成的序列),按位运算就是在按照二进制位的每一位依次进行计算。
位运算符主要有以下四个:& | ~ ^(其中除了~是一元运算符以外,其余的都是二元运算符)。这部分知识基本与C语言一模一样(当做巩固,具体见之前文章或者题目)。
按位与(&)
两个二进制位都是1,则结果是1,否则结果为0(注意:只能是整数(int/short/long/byte)的时候)。
按位或(|)
两个二进制为都是0,则结果是0,否则结果为1(注意:只能是整数(int/short/long/byte)的时候)。
按位取反(~)
把所有二进制位0转为1,1转为0。
按位异或(^)
两个数字的二进制相同,则结果为0;相异的结果则为1。
移位运算
移位运算符主要有三个:<< >> >>>,且都是二元运算符,都是按照二进制比特位来运算的。
左移(<<)
与C语言一样:
1. 最左侧位舍去,最右侧补0(注意:左移时,丢弃的是符号位,因此正数左移可能会变成负数)。
2. 左移一位相当于原数字*2;左移N位相当于原数字*2的N次方。
右移(>>)
与C语言一样:
1. 最右侧位舍弃,最左侧不符号位(正数补0,负数补1)。
2. 右移一位相当于原数字/2;左移N位相当于原数字/2的N次方。
无符号右移(>>>)
无符号右移在C语言中是没有的,其作用是:最右侧位舍弃,最左侧补0。
小结
1. 进行移位运算相对于直接做乘除效率会高一些,所以当某个代码正好需要乘除2的N次方的时候就可以使用移位运算。
2. 对负数进行移位运算,会得出向上取负数的整的值,导致其运算的结果与直接做除法的结果不相同。
public class TestDemo {
public static void main(String[] args) {
System.out.println(-3>>1); //-2
System.out.println(-3/2); //-1
}
}
条件运算符
语法是:布尔表达式1?表达式2:表达式3(当布尔表达式1的值为ture,整个表达式的值为表达式2的值;当布尔表达式1的值为flase,整个表达式的值为表达式3的值)。
这是唯一的一个条件运算符,也是唯一一个三目运算符。
注意的点:
1. 表达式2和表达式3的结果是要同类型的,除非是能够发生类型隐式类型转换的。
2. 表达式是不能单独存在的,其产生的结果必须要被使用。
程序逻辑控制
Java中程序的逻辑控制语句
分支语句
在Java中,分支语句有两种:if语句和switch语句。大部分与C语言中的语法一样(详细可以看之前C语言文章),但是还有几点需要注意:
1. 在if语句中的判断表达式必须是布尔表达式
2. 悬垂else问题也是和C语言一样,匹配的是其最近的if
3. 在switch语句中,多个case后的常量值是不可以重复的
4. switch语句的括号内只能是下面的几种类型:
(1)基本类型:byte、char、short、int(注意不能是long类型)
(2)引用类型:String常量串、枚举类型
循环结构
在Java中,循环语句有三种:while循环、for循环、do……while循环。大部分与C语言中的语法一样(详细可以看之前C语言文章),但是还有几点需要注意:
1. 使用while循环的时候的循环条件必须是布尔类型
2. 使用for循环的时候循环条件(也就是第二个表达式)也必须是布尔表达式
3. do while循环的循环条件也必须是布尔表达式且是在第一次执行语句块之后才进行判断
4. break的功能是让循环提前结束
5. continue的功能是跳过本次循环,立刻进入下一次循环执行
Java中的输入输出方式
输出到控制台
有以下这三种方法:
public class TestDemo {
public static void main(String[] args) {
System.out.println(10); //输出带换行
System.out.print(10); //输出不换行
System.out.printf("%d",10); //格式化输出
}
}
从键盘输入
1. 使用Scanner读取字符串/整数/浮点数
案例1:
import java.util.Scanner;
public class TestDemo {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.print("请输入姓名:");
String name=sc.nextLine();
System.out.print("请输入年龄:");
int age=sc.nextInt();
System.out.print("请输入工资:");
float money=sc.nextFloat();
System.out.println("信息如下:");
System.out.println("姓名:"+name+"\n"+"年龄:"+age+"\n"+"工资:"+money);
sc.close();
}
}
2.使用Scanner循环读取N个数字
案例2:
import java.util.Scanner;
public class TestDemo {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNextInt()){
int num=sc.nextInt();
System.out.println(num);
}
}
}
注意:
1. 当循环输入多个数据的时候,可以使用Ctrl+D来结束运行
2. 当使用完Scanner进行输入的时候,需要将其close掉
巩固练习
下面引出一个猜数字游戏练习来巩固程序逻辑控制。
系统自动生成一个随机数(1-100),输入一个数字,如果输入的数比该数小,则输出“猜小了”;如果输入的数比该数达,则住处“猜大了”;否则输出“猜对了”。
实现代码:
import java.util.Random;
import java.util.Scanner;
public class TestDemo {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
Random random=new Random();//在此处填值可以使这个随机数一致都是同一个数
//int randNum=random.nextInt(100)+1;//1-100(方法一)
int randNum=(int)(Math.random()*100+1);//1-100(方法二)
while(true){
System.out.print("请输入:");
int num=sc.nextInt();
if(num<randNum){
System.out.println("猜小了");
}else if(num>randNum){
System.out.println("猜大了");
}else{
System.out.print("猜对了");
break;
}
}
}
}
来源:https://blog.csdn.net/Faith_cxz/article/details/123435700


猜你喜欢
- 本文所述实例为使用伪随机数进行用户密码加密,这段代码为核心部分主要代码,需要配合其它的程序实现,感兴趣的读者可以自己进一步加以完善,不费话了
- 在linux主机部署Eureka高可用方案的时候,发现注册到服务中心的服务IP是随机的,由于主机的网卡是多个,随机的IP并不是自己想要的,上
- 看到某些App里面有读取联系人的功能,然后自己尝试了一下。发现这个挺简单的。然后自己就做了一个demo给大家,希望借这个demo可以让大家学
- 第 1 步:将这个 Spring Boot 项目的打包方式设置为 war。<packaging>war</packagin
- 我就废话不多说了,大家还是直接看代码吧~<resultMap id="ParentMap" type="
- 功能需求:为软件设定一个使用有效期,当超过指定时间后,程序无法运行。实现思路:定义一个常量,用于记录一个时间,我们称之为标记时间,使用当前时
- mybatis #{}无法自动添加引号传入string类型时,无法自动添加引号,导致SQL将值识别为列名,导致SQL失败解决使用map类型代
- Java * 。具体有如下四步骤:通过实现 InvocationHandler 接口创建自己的调用处理器;通过为 Proxy 类指定 C
- 在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守
- 写在前面:上周末抽点时间把自己写的一个简单Socket聊天程序的初始设计和服务端细化设计记录了一下,周二终于等来毕业 * 的软考证书,然后接下
- 0. Iochttps://docs.spring.io/spring-framework/docs/current/spring-fram
- 在做项目中经常会遇到有项目需求是需要判断字符为中文的一些问题,所以搜集了判断中文字符的代码片段,特此分享供大家参考。直接贴出代码了,里面有详
- 本文实例讲述了C#中datagridview使用tooltip控件显示单元格内容的方法。分享给大家供大家参考,具体如下:代码如下:using
- 不废话了,直接给大家贴代码了。class term { String str; int id; &
- 在textView添加超链接,有两种方式,第一种通过HTML格式化你的网址,一种是设置autolink,让系统自动识别超链接。 代码如下:
- 本文实例讲述了C#启动进程的几种常用方法。分享给大家供大家参考。具体如下:1.启动子进程,不等待子进程结束private void simp
- 1、下载64位rxtx for java 链接:http://fizzed.com/oss/rxtx-for-java2、下载下来的包解压后
- 使用INI配置文件,简单便捷。该辅助工具类为C#操作INI文件的辅助类,源码在某位师傅的基础上完善的来,因为忘记最初的来源了,因此不能提及引
- 汉诺塔简介:我们想要实现的是 让 A柱上的盘子,移动到C柱上1层汉诺塔2层汉诺塔3层汉诺塔详解图第一步第二步第三步第四步第五步第六步第七步经
- 一、使用注解实现自定义映射关系当POJO属性名与数据库列名不一致时,需要自定义实体类和结果集的映射关系,在MyBatis注解开发中,使用 @