运算符-表达式-分支语句-循环语句
【摘要】运算符、表达式、分支语句、循环语句
前言
说句实话,按照道理说我应该对这一部分很熟悉,毕竟大学考前突击了好几个夜晚。但是,哈哈哈哈。特别的位运算那边,想不起来,故查阅自己当时学习的笔记和现在的理解整理出此文~
运算符
赋值运算符
=
左值,出现在赋值运算符左边的量【局部变量、常量】
右值,出现在赋值运算符右边的量【局部变量、常量、字面量】
算术运算符
+,-,*,/,%,++,--,+=,-=,*=,/=,%=
针对++和——运算符,它分为:前
和 后
操作
前++,变量本身和表达式的值都增1.
后++,表达式的值不变,变量本身的值增1.
Java基本数据类型中,除了boolean
不能做算术运算外,其它的7种类型都可以进行算术运算,它们遵守如下两条规则:
A.byte,short,char,int
之间的运算,结果总是int
B.除A外规则,其他的按照从小到大的原则进行转换,如下:byte,short,int ->long ->float ->double
比较运算符
>,<,>=,<=,==,!=
比较运算符的结果一定是boolean
值,如:
1 | boolean b = 5 > 3; |
逻辑运算符
运算符 | 说明 |
---|---|
&& |
逻辑与,两边同时成立,结果才成立。 |
|| |
逻辑或,两边同时不成立,结果才不成立。 |
! |
真为假,假为真 |
注:逻辑运算符要求它的操作数必须是boolean
类型。
如:boolean b = (5 > 3) && (5 % 3 == 0);
&&
和 ||
是 短路运算符。
三目运算符
?:
语法:
expr1?exper2:exper3;
当expr1
成立时,则执行并返回expr2
,否则,执行并返回exper3
。
如:
1 | int i = 19; |
位运算符
基本概念
运算符 | 说明 |
---|---|
& |
按位与,两边为1,结果为1,有一边为0,结果为0。 |
| |
按位或,两边为0,结果为0,有一边为1,结果为1。 |
^ |
按位异或,相同为0,不同为1。 |
~ |
按位取反,0位1,1为0。 |
>> |
右移位,高位补符号位。 |
>>> |
无符号右移位,高位总是补0。 |
<< |
左移位 |
&=,|=,^=,~=,>>=,>>>=,<<=
1 |
以整数为例,如:
二进制转十进制,乘幂相加法。
十进制转二进制,除2取余,直到商为0。
二进制 | 十进制 |
---|---|
10 | 2 |
11 | 3 |
10110 | 22 |
101111011 | 187 |
注:在Java中,支持二、八、十、十六进制的字面量,默认下,整数都是以十进制表达的。
1 | //如果你想用二进制表达整数,则需要以0b开头。 |
求负数的二进制方法:
1).先算 这个负数 绝对值 减1的 二进制。
2).按位取反:1111111111… 011 => 共计32位。
位运算口诀
清0取位要用与,某位置1可用或,
若要取反和交换,轻轻松松用异或。
这个口诀中,关键要找到掩码[mask]
比如:
1.判断一个整数的奇偶性。
1 | //定义掩码: |
2.高24位不变,低8位取反
1 | //定义掩码: |
3.一个整数连续异或另一个整数两次,其值不变。(最简单的加密)
如:
1 | int a = 18;//10010 |
表达式[expression]
概念:由变量、常量、字面量与运算符组合成的合法语句。
如:
1 | int i = 9;//变量定义,也是 赋值表达式 |
分支语句
if语句
语法:
1 | if(条件表达式){ |
举个栗子,如:
1 | int i = 9; |
牛刀小试,请根据如下要求编写一个程序。
1.从键盘输入学员的成绩,根据成绩打印出相依的等级,成绩和等级的关系是:
成绩 | 等级 |
---|---|
>= 95 | A+ |
[90,95) | A |
[80,90) | B |
[70,80) | C |
[60,70) | D |
<60 | E |
switch语句
语法:
1 | switch(变量因子){ |
注:变量因子的数据类型只能是:byte,short,char,int,枚举,Sting
。
举个栗子,如:
1 | int i = ...; |
牛刀小试,请根据如下要求编写一个程序。
1.提示用户从键盘上输入年份和月份,然后判断此年月最大有多少天。
点击进入答案解析
循环语句
for循环
语法:
1 | for(expr1;exper2;exper3){} |
注:事先已经明确循环次数的场景下可以使用for循环。循环都可以嵌套。
举个栗子,如:
1 | //使用for循环来循环5次。 |
牛刀小试,请根据如下要求编写一个程序。
1.打印输出一个99法则表。
点击进入答案解析
while循环
语法:
1 | while(条件表达式){ |
比如,使用while循环5次
1 | int i = 0; |
注:
如果事先不知道循环次数,可以使用while语法。
如果事先明确知道循环次数,则建议使用for语法。
如:
1 | while(true){ |
案例:
随机生成1~100之间的随机整数,当生成的随机数恰好是你事先指定的一个整数时,
则此程序退出,并打印输出循环次数。
思考:在java中,如何生成随机数?
1 | 方法一:利用java.util.Random类 |
do while循环
语法:
1 | do{ |
它是一个先执行循环体而后做条件判断的循环。
如:
1 | int i = 0; |
break和continue语句
break语句,用来打破循环。
continue语句也是一样只能用在循环中,它是结束本轮循环,开始下一轮循环。
注:
不管是break还是continue语句,它们影响的都是最接近于自己那一层循环。
如:
1 | for(int i = 0;i<9;i++){ |
习题
打印形状
1.编写一个程序,打印如下形状:[高度由用户输入]
1 | * |
2.打印形状[高度由用户输入]
1 | * |
3.打印形状[高度由用户输入]
1 | * |
打印数字
1.输出打印如下数字
1 | 1*1=1 |
2.输出如下数字
1 | 1*8+1=9 |
算法题
1.根据用户输入的整数,计算出此数的阶乘5! = 5*4*3*2*1
2.找出1000以内的所有水仙花数
水仙花数是指一个N位正整数(N>=3),它刚好是它每一个数的n次幂之和。
如:153=1^3+5^3+3^3
3.找出200以内所有的质数,并打印出来,要求:每行最多输出10个。
点击进入答案解析
结束语
上面这些习题是我曾经做过的题目,这些题目很基础,不要动脑子,适合初学者。但是呢,一旦我去LeetCode上面刷题,我就怀念这些基础题,哈哈哈哈。
所以,现在先在这篇文章贴出来,等哪天被LeetCode虐了,再来这边找找存在感,后续贴源码链接。