Java基础自学笔记——第三章:选择

第三章:选择

一.多分支if-else语句和switch语句

1.if-else语句
当if中条件不满足时,则执行else中语句。

grade=65;
if(grade>=85)
level='A';
else if(grade>=75)
level='B';
……
else
level='D';

上例中else if中条件不用写成else if(grade<85&&grade>=75),因为上一条件不符合自动取反面的集合。

2.switch语句
语法:

switch(常量表达式){
case1:
//常量1对应的语句1;
break;
case2:
//常量2对应的语句2;
break;
……
default:
//以上条件都不符合时执行的语句
}

注意:

  • switch必须要能计算出一个char、byte、short、int或String类型的值
  • 直到遇到一个break语句或到达该switch语句的结束
  • 默认情况下default语句是可选的
  • 关键字break是可选的,当遇到break语句时,会立刻终止switch语句
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:day=31;break;
case 4:
case 5:
case 6:
case 9:
case 11:day=30;break;
}

上例展示的是如果月份为1,3,5,7,8,10,12月,则天数为31,否则天数为30。

当需要用条件来判断时,使用if-else语句,当判断一个常量,如数字,字符等用switch语句。

二.常见的错误和陷阱

1.忘记必要的括号

if(x>5){
else{}

2.在if行出现错误的分号

if(x>5);
{
//语句
}

//相当于
if(x>5){}
{
//语句
}

3.对布尔值的冗余测试

boolean b=true;
if(b==true){
//语句
}

//上面的可以改写为
if(b){
//语句
}

4.悬空else出现的歧义,else总是与它最近的if字句匹配

if(x>5)
//语句1
  else 
     if(x<2)
     //语句2
else//此else其实与最近的if匹配
//语句3

5.两个浮点数值的相等测试

对于一个非常小的值epsilon,当|x-y|<epsilon时,那么x和y非常接近,将epsilon的值设置为10^-14来比较两个double类型的值,而设为-7此来比较两个float类型的值。

6.简化boolean变量赋值

boolean b;
if(num%2==0){
b=true;
}
else
b=false;

//可以简化为
boolean b=num%2==0;

三.逻辑运算符

1.&&与||

他们都是懒惰操作符,就&&而言,如果&&之前条件为假,那么它将不会判断&&之后条件,之前条件如果为真则要判断后面条件,||同理。

(3>5)&&(6>4)//3>5已经为假,不会判断后面的6>4
(9>6)||(4<3)//9>6已经为真,不会判断后面的4<3

2.&&、||与&、|的区别
可以理解为&和|为“勤劳”操作符,就&而言,无论&之前条件是否为真,都会执行&之后条件,|同理。

   int i=1;
   System.out.println(3>5&i++>1);//false
   System.out.println(i);//2

四.操作符的优先级和结合规则

操作符优先级
二元操作符都是左结合的,赋值操作符都是右结合

a-b+c-d=((a-b)+c)-d;//左结合

//当x=y=z=1时
x=y+=c=5
//相当于x=(y+=(c=5)),结果:x=6,y=6,z=5

五.产生随机数

1.产生随机数用到的方法是Math.random()。因为Math类中的方法都是静态的,所以不用创建实例调用它的方法。

2.Math.random()方法的取值范围是[0.0,1.0)。注意不包含1.0

3.产生随机数的几个小技巧

  • 产生n以内的随机数(不包含n):Math.random()*n,包含时乘(n+1)
  • 产生n以内的随机整数(不包含n):(int)(Math.random()*n),包含时乘(n+1)
  • 产生大于等于a小于b的随机整数时:(int)(Math.random()*(b-a))+a
Math.random()*10;//10以内的随机数,不包括10
(int)(Math.random()*10);//10以内的随机整数,不包括10
(int)(Math.random()*40)+10;//10-50之间的随机整数,不包括50

六.条件表达式

java中唯一一个三元操作符?和:同时出现

February=(year%4==0&&year%100!=0||year%400==0)?29:28;

此例展示的是二月的天数,由?分隔开,问号前为条件,条件为真则执行冒号前面的,否则执行冒号后面的。

七.总结

通过第三章的学习,我学习到了if-else和switch运用的不同场景和使用规则,掌握了可以避免出现的错误和陷阱,明白了逻辑操作符以及与其他操作符之间的优先级,最后学会了产生随机数的方法和技巧。

加油!第四章待更……

发布了4 篇原创文章 · 获赞 9 · 访问量 2201

猜你喜欢

转载自blog.csdn.net/weixin_42563224/article/details/104195523