Java的运算符和程序逻辑控制你了解吗
目录
- 运算符
- 算术运算符
- 基本四则运算符(+-*/%)
- 增量运算符(+=-=*=/=%=)
- 自增/自减运算符(++--)
- 关系运算符
- 逻辑运算符
- 逻辑与(&&)
- 逻辑或(||)
- 逻辑非(!)
- 位运算符
- 按位与(&)
- 按位或(|)
- 按位取反(~)
- 按位异或(^)
- 移位运算
- 左移(<<)
- 右移(>>)
- 无符号右移(>>>)
- 小结
- 条件运算符
- 程序逻辑控制
- Java中程序的逻辑控制语句
- 分支语句
- 循环结构
- Java中的输入输出方式
- 输出到控制台
- 从键盘输入
- 巩固练习
- 总结
运算符
运算符,顾名思义就是用来执行数学运算的。在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; } } } }
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!