前言
通过几天的学习,对于Java中的运算符与逻辑控制部分,总的来说:由于语言的相通性,知识点大体与C语言部分相差无几。所以对于这部分,笔者就不在一一介绍了,对于重复知识点会给出相应的C阶段博客链接,有兴趣的可以点击阅读。本章重点在于盘点Java中相对于C语言值得注意的地方。
一、运算符
在C语言阶段笔者已将C语言中的运算符进行了详细的介绍,Java中的运算符与C语言大体相同,在阅读本文之前可以了解一下:C语言操作符
🍑1、取模运算符%
注意1: Java中的%
的操作数可以为整数也可以为浮点数
在Java中 % 不仅可以对整型取模,也可以对double类型取模。当然,虽然Java语言支持这种写法,但是没有太大意义,一般都是对整型取模的。如写出如下代码:
System.out.println(11.5 % 2.0);
注意2: 做除法-/
和取模-%
时,右操作数不能为0
public static void main(String[] args) { int m=10; int n=0; System.out.println(m%0); System.out.println(m/0); }
🍑2、增量运算符
形如:++
、--
、+=
、-=
、%=
、*=
……
注意1: 只有变量才能使用该运算符,常量不能使用。
注意2: 增量运算符对于小于int类型会发生自动强转。
public static void main(String[] args) { short sh=12; //sh=sh+2; //-->sh+2整形提升为int类型-->int类型赋值给short会报错, //如果赋值需要强转-->sh=*(short)(sh+2); sh++; sh+=2;//不会报错--理解自动进行了类型的转换 System.out.println(sh); }
注意3: 一段需要注意的代码
对于这段代码由于设计到Java的汇编,目前大家记忆即可:
public static void main(String[] args) { int i=10; i=i++;//i最终是10 System.out.println(i); }
🍑3、逻辑运算符
即:逻辑与&&
、逻辑或||
、逻辑非!
注意1: 逻辑运算符的操作数和运算结果都是boolean
类型
对于Java中没有0为假,非0为真的概念。Java中真就是true,假就是false,因此逻辑运算符操作数和结果也只有true或false两种取值。
注意2: &&
与||
遵循短路求值
对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式.
对于 ||, 如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式.
& 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算. 但与 && || 相比, 它们不支持短路求值。
public static void main(String[] args) { System.out.println(10 > 20 && 10 / 0 == 0); // 打印 false System.out.println(10 < 20 || 10 / 0 == 0); // 打印 true System.out.println(10 > 20 & 10 / 0 == 0); // 程序抛出异常 System.out.println(10 < 20 | 10 / 0 == 0); // 程序抛出异常 }
🍑4、位运算符
注意1: 移位的作用和意义
- 左移 1 位, 相当于原数字 * 2.
左移 N 位
, 相当于原数字*2 的N次方
. - 右移 1 位, 相当于原数字 / 2.
右移 N 位
, 相当于原数字/2 的N次方
. - 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
- 移动负数位或者移位位数过大都没有意义.
public static void main(String[] args) { System.out.println("-128右移1位后:"+(-128>>1)); System.out.println("4左移1位后:"+(4<<1)); }
注意2: >>
、<<
、>>>
三种移位操作符的对比
- 左移
<<
:左边丢弃,右边补0
- 右移
>>
:右边丢弃,左边补符号位
- 无符号右移
>>>
:右边丢弃,左边补0
二、逻辑控制语句
🍑1、switch语句
注意1: 多个case
后的常量值不可以重复
注意2: switch
的括号内只能是以下类型的表达式:
基本类型: byte、char、short、int
,注意不能是long、double、float、boolean
类型
引用类型: String
常量串、枚举
类型
注意3: switch 不能表达复杂的条件
// 例如: 如果 num 的值在 10 到 20 之间, 就打印 Success // 这样的代码使用 if 很容易表达, 但是使用 switch 就无法表示. if (num > 10 && num < 20) { System.out.println("Sucess"); }
三、Java输入和输出
对于这部分大家简单了解,学会简单使用即可,一般在工程中很少用到,下面笔者就浅浅简单介绍一下👇:
🍑1、输出到控制台
System.out.println(msg); // 输出一个字符串, 带换行 System.out.print(msg); // 输出一个字符串, 不带换行 System.out.printf(format, msg); // 格式化输出
println
输出的内容自带\n
,\n
printf
的格式化输出方式和 C 语言的 printf 是基本一致的.- 单独使用不加参数的System.out.println()表示
换行
.
格式修饰符表:
转换符 | 类型 | 举例 | 输出 |
d | 十进制整数 | (“%d”, 100) | 100 |
x | 十六进制整数 | (“%x”, 100) | 64 |
o | 八进制整数 | (“%o”, 100) | 144 |
f | 定点浮点数 | (“%f”, 100f) | 100.000000 |
e | 指数浮点数 | (“%e”, 100f) | 1.000000e+02 |
g | 通用浮点数 | (“%g”, 100f) | 100.000 |
a | 十六进制浮点数 | (“%a”, 100) | 0x1.9p6 |
s | 字符串 | (“%s”, 100) | 100 |
c | 字符 | (“%c”, ‘1’) | 1 |
b | 布尔型 | (“%b”, 100) | true |
h | 散列码 | (“%h”, 100) | 64 |
% | 百分号 | (“%.2f%%”, 2/7f) | 0.29% |
🍑2、从键盘输入
import java.util.Scanner;//需要导入包 public class TestDemo { public static void main(String[] args) { Scanner scan = new Scanner(System.in);//固定这样写 int n= scan.nextInt();//表示读入一个 整数 float nn=scan.nextFloat();//表示输入一个浮点数 double nnf=scan.nextDouble();//表示输入一个双精度浮点数 String nnn=scan.nextLine();//表示输入一个字符串 String name=scan.next();//相较于nextline有一个很大的缺点,遇到空格就结束了 scan.close();//还可以加一个这个关闭 } }
多组输入可以这样写:
public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNextInt()) { int tmp = sc.nextInt(); //功能语句…… } }
注意: 当循环输入多个数据的时候, 在Windows的cmd上使用 ctrl + z 来结束输入 (Linux / Mac 上使用 ctrl + d)idea也使用ctrl+d结束输入。
回车字符的处理:
public static void main(String[] args) { Scanner scan=new Scanner(System.in); System.out.println("请输入年龄:"); int age=scan.nextInt(); //这样处理: scan.nextLine(); //如果不处理,上边输入完成后回车会被下边读取到 System.out.println("请输入名字:"); String name=scan.nextLine();//会读取/n }
四、猜数字游戏——Java实现
import java.util.Random; import java.util.Scanner; public class TestDemo { //猜数字-Java版本 public static void main(String[] args) { Scanner scan=new Scanner(System.in); Random random=new Random();//真随机 int ranNum=random.nextInt(100);//表示0-100-[0,100)之间的数字 //不能写1,应该写布尔表达式 while(true) { System.out.print("请输入一个1-100之间的数字:>"); int n= scan.nextInt(); if(ranNum<n) { System.out.println("猜大了!"); } else if(ranNum>n) { System.out.println("猜小了!"); } else { System.out.println("猜对了!"); break; } } } }
Java中使用Random
生成随机数,同Scanner
需要导入相应的包,现在仅需要记住相应的表达格式(对于这部分概念后面会具体介绍)。上面的猜数字游戏仅给出大体框架,如果想要继续完善,大家可以尽情发挥!大家也可以参考一下这篇:猜数字小游戏
总结
本章盘点了Java中需要注意的运算符、逻辑控制中的switch语句以及Java中的输入输出,最后使用以上知识点实现了Java中的猜数字小游戏。本章内容不多,但笔者尽力做到句句重点,如有不足,敬请斧正!