📄 04_expressions_flowcontrol.txt
字号:
运算符:
按照优先级向下排列
1: () [] .
()优先运算
[]数组下标
.引用访问属性和方法
结合性:
从左向右
2: ++ -- ! ~
++ 自加
-- 自减
int a=1;
int b=++a;
int b=a++;
! 逻辑非 boolean b=false; !b==true;
~ 按位取反 byte b=0; byte c=~b; -1
+ 正
- 负
结合性:
从右向左
3: * / %
* 乘法
/ 除法
% 求余
结合性:
从左到右
4: + -
+ 加法
- 减法
结合性:
从左到右
5: >> << >>>
>> 左移
<< 右移
>>> 算术右移,无符号右移
结合性:
从左到右
6: > >= < <=
int i=1,j=2;
boolean b=i<j;
结合性:
从左到右
7: == !=
结合性:
从左到右
8: &
& 按位与
同真为真,其他为假
结合性:
从左到右
9: ^
不同为真,其他为假
^ 按位异或
结合性:
从左到右
10: |
同假为假,其他为真
| 按位或
结合性:
从左到右
11: && &
&& 逻辑与(短路)
int a=3,b=5,c=8;
if(a>b&&c++>=9){//如果左边是真还是假右边不运算
.....//这里的希望c做的++操作没有做
}
& 逻辑与(不短路)
int a=3,b=5,c=8;
if(a>b&c++>=9){//不论左边是真还是假右边都进行运算
.....//这里的希望c做的++操作没有做
}
结合性:
从左到右
&根据左右两边数据类型来进行判断.
C++不这样做是因为它的bool值和整型值是混用的.
12: || |
|| 逻辑或(短路)
| 逻辑或(不短路)
结合性:
从左到右
13: ? :
_?_:_ 三目运算符
结合性:
从左到右
14: = += -= *= /= %= <<= >>= >>>= &= /= ^=
结合性:
从右到左
++ 如果在语句内被使用就要注意它代表
/ 整除
% 求余注意符号的问题.左边操作数是正数结果就是正数,如果左边操作数是负数就是负数.
int a=-5;
if(a%2==1){//-5%2==-1
a是奇数.
}esle{
a不是奇数.
}
位运算:
>> 右移,最高位是什么就补什么.不改变符号
相当于除2
<< 出去的不管,地位补0;
>>> 不论你的最高位是0还是1,都用0来补位.
& 先应当把整数的二进制方式画出来,最后得到新的整数.
^ 按位异或,
| 按位或
使用场景:
&:都为1结果位1,有一个位0都为零
航班的机票系统,航班类型,有个航班的班期.
需要用数据来描述这个班期,直接能看出来那天有航班,那天没有航班.
这个时候就可以使用byte.
还可以使用boolean[7];
如果使用一个byte的每位来表示每个星期中的一天.
如果1,3,5有航班,那么可以byte s=42.
如果我想去判断s这个值,周三有没有航班.s&8但这样并不通用
结果可以这样
if((s&(1<<a))>0){//3就是我们要判断的星期几.
有航班
}else{
没有航班
}
结合性是优先级的补充,统一优先级的运算到底该从左向右还是从右向左来算.
表达式:
通过这些运算符加上变量和常量就可以计算出一个唯一的值.
流程控制:
if( ... ){
}else{
}
容易出错的地方:
int a=3,b=5,c=8,d=0;
if(a>b)
if(c>b)
d=c;
else
d=b;
else和if的匹配原则是压栈式的依次匹配,在做if else语句最好把{}带上.
switch(){
case xxx:语句;break;
}
switch的括号里面可以出现那些类型的数据.
byte short int char enum
为什么如果出现一个实数值,由于实数值是近似取值,所以实数变量是补能精确定位一个数的.
float f1=...;
float f2=...;
if(f1==f2){
....;
}
不代表两个值是相等的.
f1=1.1,f2=2.0f-0.9f;
f1和f2是不相等的.就是由于存储方式导制的.
去判断两个实数值那么需要这样.
if(Math.abs(f1-f2)<1e-6){
//求f1-f2的绝对值,如果小于10的-6次方就认为两个数字是相等的.
}
循环:
怎么样把一个问题转换成循环控制去进行.
我不知道怎么把现实的逻辑转换成循环的逻辑来处理.初学程序设计的人的门槛.
例子1:
1-1/3+1/5-1/7-....-1/99;
写不出代码,
1.最起码知道用循环.
2.选择那种循环语句,什么时候用三种循环中那种,根据方便来定.
如果循环的次数已知那么用for比较方便
如果循环不是根据次数而是根据一些不定的条件,那么用while比较好.
for(表达式1;表达式2;表达式3){
}
while(表达式){
}
do{
}while(表达式);
//4.1定义一个和值,
double s=0.0;
//4.2每循环一次都要求每一项的值
double d=0.0;
//5.2.1定义一个整形值控制正负
for(int i=1;i<50;i++){
//3.我每循环一次我的程序要做什么
//3.1去定这一项的值
//3.2确定这一项的正负.
//3.3把这一项加到循环值上去.
//4.定义一些什么样的辅助变量
//5思考循环语句怎么写
//5.1求每一项的值,即确定每一项的值
d=1.0/(2i-1);
//5.2确定每一项正负;
d=d*k;
//5.3求和值
s+=d;
k=-k;
}
例子2:
已知一个整形值int a=2857;
写一段代码换成一个新的整数把数字序列到排.
break;
contiune;
loop1:
for(){
while(){
break loop1;
}
}
...
在内层循环也可以带有语句标号.
loop1:for(){
while(){
contiune loop1;
}
}
题目
编写程序,求满足以下条件的四位数.
1.千位数字要大于百位数字.
2.十位数字的语个位数字.
3.千位 + 个位=百位 + 十位.
for(int i=1000;i<9999;i++,j++){
if(
(i/1000) > (i/100%10) &&
(i/10%10) >(i%10) &&
( (i/1000)+(i%10)==(i/100%10)+(i/10%10) )
)
System.out.println(i);
}
byte b1=1;
byte b2=2;
byte b3=b1+b2;
System.out.println(b3);
int i=b1+b2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -