本课要点及难点:
分支:if; if else; if else if
注:在java中,花括号如果不写会默认只执行第一行!切记!!!
开关语句:switch case
循环语句:for;while;do while
1.不同的类型的值的运算结果,以大的为标准(参考上一篇中的数据类型),数据类型一致时,结果类型不变(注:八种基本数据类型和String相加必得String值,特殊类型后续再讨论,这里不展开)
如int类型的值与double型相加减得到的必然是double值
2.关系运算结果为boolean值
关系运算符:>,<,==,>=,<=,!=
注:这里的==有疑问没关系,请往下看,下面的 赋值 中会讲到
3.逻辑运算
&& and|| 或
4.或运算和与运算
转为二进制,按逻辑表计算
5.非运算~
1为0,0为1(0:-1 1:-2以此类推)
6.异或 ^
a^b(相同取0,不同取1)
7.左移右移(正负号,>>>不考虑符号)
8.优先级
1.()
2.一元(-、--、++、!)
3.二元(算数、关系、逻辑)
4.三元(表达式1?表达式2:表达式3)
eg:
public static void main(String[] args) {
int i=3;
System.out.println("测试结果是:"+(i==1?"条件1为真":"条件1为假"));
}
此处输出的结果是:
测试结果是:条件1为假;因为:
三元表达式中,若表达式
1
为真,就返回表达式
2
,否则返回表达式
3,显然此处的i不等于1
5.赋值
在java中,“=”用于赋值,然后出现一个问题,那就是如何判断两个值是否相等呢?为了解决这个问题,我们规定,判断两个值是否相等时我们采用两个=,即“==”,这也是上文中留下的问题
9.分支语句
if(){}
if(){} else{}
if(){} else if(){}
if(){} else if(){} else{}
我们先看一个案例:
public static void main(String[] args) {
int score =90;
if(score<60){
System.out.println("不及格");
}
if(score>60){
System.out.println("及格");
}
if(score>75){
System.out.println("良好");
}
if(score>85){
System.out.println("优秀");
}
}
此段代码执行的结果并非我们所想的“优秀”,实际结果是:
及格
良好
优秀
一共三个结果,出现三个结果的原因我们可以从代码中寻找原因:
当进入第二个判断时,i满足条件,打印出“及格”,第三个判断依然满足,第四个亦然,出现这个情况的原因是我们的分支语句安排的有问题,if成了并列平级的关系,没有高低级之分,说起来有点抽象,我们通过下面修改后的代码再看:
public static void main(String[] args) {
int score =90;
if(score<60){
System.out.println("不及格");
}
else if(score>60){
System.out.println("及格");
}
else if(score>75){
System.out.println("良好");
}
else{
System.out.println("优秀");
}
}
此段代码执行的实际结果是:
及格
当然结果肯定不是我们期望的“优秀”,但是我们可以通过这个来更加深入地理解if与else if 及 if 的关系,此段代码中,执行到第二个判断时发现满足条件就不再向下执行判断了,所以出现了这个结果,当然,这个案例只是为了更好理解分支语句,实际操作中为了提高效率,我们可以不需要嵌套这么多的分支,可以通过合理地安排阈值来实现相同的功能,此处可以作为一个作业。
10.for(表达式1;表达式2;表达式3) { 循环体 }
表达式1:初始条件(再循环体开始执行前执行)
表达式2:每次循环的判断条件boolean
表达式3:循环体结束后再执行
eg:
public static void main(String[] args) {
for(int i=0;i<10;i++){
System.out.println("我真帅");
}
}
此段代码执行结果是十个“我真帅”,因为i从0开始,每执行一次就会自己加1,再进行判断是否依然小于10,显然从0到9一共是10个数字,即执行了十次
注:for(;;)或者for(表达式1;;表达式3)是死循环
这里可以自己写代码测试一下,此处不再举例
1.while(布尔值){循环体}先判断,再执行
2.do{循环体}while(布尔值);先执行,再判断
看两个案例:
eg1:
public static void main(String[] args) {
boolean flag=false;
while(flag){
System.out.println("我真帅");
}
}
运行代码之后什么也不会发生,因为死循环的条件不满足,所以不会执行循环体
eg2:
public static void main(String[] args) {
boolean flag=false;
do{
System.out.println("我真帅");
}while(flag);
}
此处的代码会先执行一遍,然后再检查条件是否满足,所以会出现一行“我真帅”,然后就没有然后了
结束循环的关键字:
continue: 结束本次
break:结束本层
return:结束方法
分别看如下案例:
continue案例:
public static void main(String[] args) {
for(int i=0;i<3;i++){
System.out.println("循环体开始");
if(i==1){
continue;
}
System.out.println("循环体结束");
}
}
运行结果:
循环体开始
循环体结束
循环体开始
循环体开始
循环体结束
观察标记出来的那句话,并没有下面的一句:循环体结束,因为满足continue的条件:i=1,也就是说continue中断的是本次循环,然后其它的继续走,这也是continue的本意:继续
break案例:
public static void main(String[] args) {
for(int i=0;i<3;i++){
System.out.println("循环体开始");
if(i==1){
break;
}
System.out.println("循环体结束");
}
System.out.println("**主方法结束**");
}
这段代码运行的结果是:
循环体开始
循环体结束
循环体开始
**主方法结束**
通过结果我们可以看出,遇到break之后,break所在的那个循环不再继续了,直接跳到了主方法里面(可以理解为到了跟循环没关系的事情里)
建议自己多动手敲一敲代码,这样会加深理解!
最后一个return案例:
public static void main(String[] args) {
public static void main(String[] args) {
for(int i=0;i<3;i++){
System.out.println("循环体开始");
if(i==1){
return;
}
System.out.println("循环体结束");
}
System.out.println("**主方法结束**");
}
运行结果:
循环体开始
循环体结束
循环体开始
可以看出,一旦遇到了return,整个方法就停止了,后续我们会继续了解return的其他更重要的用法,此处不做展开,但补充一点,return放置的位置很敏感,建议多写代码多感受
switch(表达式){
case 常量:方法;break;
.
.
.
}
表达式:可为byte,short,int,char.jdk1.7以上版本支持String
switch case又叫“开关语句”,为什么叫开关语句呢?我们来看一个案例:
public static void main(String[] args) {
int score = 50;
switch (score) {
case 50:
System.out.println("score是:50");
case 60:
System.out.println("score是:60");
case 70:
System.out.println("score是:70");
}
}
运行结果是:
score是:50
score是:60
score是:70
简单解释一下:switch后面的括号就是锁孔,括号里的东西对应的就是下面case里的不同锁芯,上面给定了一个锁芯是50,到了下面一个个试,第一个就对了,然后进开了门,但是!并没有给出口,所以就一直走下去,走到了程序结束,也就出现了上面所示的结果,我们对代码进行一些修改,变成如下:
public static void main(String[] args) {
int score = 50;
switch (score) {
case 50:
System.out.println("score是:50");
break;
case 60:
System.out.println("score是:60");
break;
case 70:
System.out.println("score是:70");
break;
}
}
也就是每个门进去后加了个break,不理解的就跳到上面去看一下break的意义。这样就不会出现上述情况了。当然还有一个default没有举例,你可以自己动手,defaultd 的意义是除了上述case中的其他所有情况,就执行****。
本节课作业是利用分支语句及循环语句打印出下图所示的乘法口诀表:
1X1=1
1X2=2 2X2=4
1X3=3 2X3=6 3X3=9
1X4=4 2X4=8 3X4=12 4X4=16
1X5=5 2X5=10 3X5=15 4X5=20 5X5=25
1X6=6 2X6=12 3X6=18 4X6=24 5X6=30 6X6=36
1X7=7 2X7=14 3X7=21 4X7=28 5X7=35 6X7=42 7X7=49
1X8=8 2X8=16 3X8=24 4X8=32 5X8=40 6X8=48 7X8=56 8X8=64
1X9=9 2X9=18 3X9=27 4X9=36 5X9=45 6X9=54 7X9=63 8X9=72 9X9=81
难点提示:可以考虑利用双层循环,第一层控制行,第二行控制列
以上!
ps:未经许可,请勿转载