学习Java 之流程控制
1.if语句:
if(布尔表达式){
//if中需要执行的代码
}
- 注意:if中的代码是否执行,主要是看这里的“布尔表达式”的结果,如果是true则代码执行,如果是false则不执行。
int a = 6;
if(a%2==0){
System.out.println("a是偶数 :a = "+a);
//此时会输出 a是偶数 :a = 6;
}
2.if-else语句:
if(布尔表达式){
//if中需要执行的代码
}
else{
//else中需要执行的代码
}
- 注意:if 和 else 形成了一个组合,特点就是如果if中的代码执行了,那么else中的代码就不会执行,如果if中的代码没有执行,那么就是if和else这两个语句中的代码必定有且只有一个会执行。
int a = 9;
if(a%2==0){
System.out.println("a 是偶数 :a = "+a);
}
else{
System.out.println("a 是奇数 :a = "+a);
}
//输出: a 是奇数 :a = 9;
3.if-else if语句:
if(布尔表达式){
//if中需要执行的代码
}
else if(布尔表达式){
//else-if中需要执行的代码
}
else if(布尔表达式){
//else-if中需要执行的代码
}
...
-
注意:if和else-if搭配形成一个组合,这里面的else-if可以出现多次
-
特点:把条件安装if + else-if
的编写顺序,依次做出判断,然后其中有一个判断成立的,返回true,那么下面的其他判断就不在进行。在这个组合中,只能会有一个判断执行,任意一个执行后其他都不在判断了。当然也有可能所以判断都不成立,都是返回的false,那么这个所以代码都不会执行了。
int a = 10;
if(a%2==0){
System.out.println("变量a的值为偶数");
}
else if(a%2==1){
System.out.println("变量a的值为奇数");
}
4.if-else if-else语句:
if(布尔表达式){
//if中需要执行的代码
}
else if(布尔表达式){
//else-if中需要执行的代码
}
else if(布尔表达式){
//else-if中需要执行的代码
}
...
else{
//else中需要执行的代码
}
- 特点:如果前面所有的判断都不成立,那么最后一定会执行else中的代码。
5.if语句的简写形式:
int a = (int)(Math.random()*100);
if(a%5==0){
System.out.println("余数为0");
}
else if(a%5==1){
System.out.println("余数为1");
}
else if(a%5==2){
System.out.println("余数为2");
}
else if(a%5==3){
System.out.println("余数为3");
}
else{
System.out.println("余数为4");
}
//可以简写为:
int a = (int)(Math.random()*100);
if(a%5==0) System.out.println("余数为0");
else if(a%5==1) System.out.println("余数为1");
else if(a%5==2) System.out.println("余数为2");
else if(a%5==3) System.out.println("余数为3");
else System.out.println("余数为4");
- 规则:如果if、else-if、else语句中要执行的代码只有一句,那么可以把外面的大括号省去不写。
6.switch-case语句:
switch(var){
case 值1:{
code 1;
break;
}
case 值2:{
code 2;
break;
}
case 值3:{
code 3;
break;
}
default:{
code 1;
}
}
- 注意:这里的break关键字,表示退出switch 代码;
- 注意:这里对比的变量var的类型是有要求的,必须是byte、short、int、char这四种,JDK8中也允许String类型的变量做对比(JDK5以后可以是枚举 ,JDK7以后可以是String,不支持long、float、double、boolean四种基本类型);
- 注意:使用switch来完成的功能,同样可以使用if来完成,但是使用if完成的功能,使用switch不一定能完成。
int mode = 0;//0 1 2 3
switch(mode){
case 0:{
System.out.println("模式0开启");
break;
}
case 1:{
System.out.println("模式1开启");
break;
}
case 2:{
System.out.println("模式2开启");
break;
}
default:{
System.out.println("默认模式开启");
break;
}
}
-
注意:假如mode本次的值是0,那么case 0
这种情况就成立了,然后执行里面的代码,代码执行完,最后执行break,然后退出整个switch语句,也就是说case 1 2
default这几种情况的代码就不再执行了,同时也不往下判断了。这一切都是因为执行了break。 -
如果没写break,那么这时候就会变成另外一种情况:例如:
int mode = 0; switch(mode){
case 0:{
System.out.println("模式0开启");
//break;
}
case 1:{
System.out.println("模式1开启");
//break;
}
case 2:{
System.out.println("模式2开启");
//break;
}
default:{
System.out.println("默认模式开启");
break;
}
}
//如果没有break,则会输出:
模式0开启
模式1开启
模式2开启
默认模式开启
//这是因为在最后的default语句才break结束,所以会执行到default中的break语句
- 这种情况,就是因为代码中没有写break的原因
7.for循环:
for(初始变量;循环条件判断;改变初始变量){
循环代码
}
- 直到某一次改变初始变量之后,循环条件变为false,那么这个循环就停止了。
- 执行流程:
执行初始化变量
执行循环条件判断
如果条件不成立(false)
循环结束
如果条件成立(true)
执行循环代码
改变初始化变量
循环条件判断
如果是判断结果是true
再次执行循环
如果是判断结果是false
循环结束 - for循环的一些使用方式:
//for循环的常用写法
for(int i=0;i<10;i++){
System.out.println("hello world");
}
//初始化变量和改变变量的值,是可以写到其他地方的
//这个最后的效果和上面的for循环是一样的
int i = 0;
for(;i<10;){
System.out.println("hello world");
i++;
}
//这是一个死循环代码,for的小括号中,只有俩个分号
for(;;){
System.out.println("hello world");
}
//for循环的大括号中,如果只有一句代码,那么可以把大括号省去不写
for(;;) System.out.println("hello world");
8.while循环:
while(循环条件){
//循环代码
}
- 特点:while和for的不同之处在于,for循环需要我们自己控制循环的次数,while循环则不需要控制循环次数
//循环不断的生成[0,9]随机数,直到生成随机数为5的时候,那么就停止这个循环。
int num = -1;
while(num!=5){
num = (int)(Math.random()*10);
System.out.println("num = "+num);
}
如果使用for完成上面同样的功能:
方式1:
int num = -1;
for(;;){
num = (int)(Math.random()*10);
System.out.println("num = "+num);
if(num==5){
break;
}
}
方式2:
int num = -1;
for(;num!=5;){
num = (int)(Math.random()*10);
System.out.println("num = "+num);
}
方式3:
int num = (int)(Math.random()*10);
for(;num!=5;num = (int)(Math.random()*10)){
System.out.println("num = "+num);
}
System.out.println("num = "+num);
9. do-while循环:
do-while循环和while循环很类似,只是do-while需要先执行循环体中的代码,然后再进行条件判断,是否可以进行一下次循环。
do{
循环代码
}while(条件判断);
例如:
public void test1(){
int a;
do{
a = (int)(Math.random()*10);
System.out.println("a = "+a);
}while(a!=5);//不会输出5
}
public void test2(){
int result = 0;
int i = 1;
do{
result+=i;
i++;
}while(i<=100);
System.out.println("result = "+result); //输出result=100 后结束
}
10.break 和 continue 关键字:
break和continue都可以使用在for循环、while、do-while循环中,同时break还可以在switch中使用。
- break 的意思退出,结束当前的循环或switch代码。
for(int i=0;i<10;i++){
System.out.println("i = "+i);
if(i==5){
break;//i=5,循环结束,输出:0,1,2,3,4
}
}
- continue 的意思是结束本次循环,让循环直接进入下一次的运行。
例如,一个for循环,需要循环10次,在循环第三次的时候,如果满足了个条件,那么我们可以使用continue来结束第三次循环,并且让循环直接进入到第四运行中。
for(int i=0;i<10;i++){
if(i==3){
continue;//i=3,跳过,直接i++,输出:0,1,2,4,5,6,7,8,9
}
System.out.println("i = "+i);//不会输出i = 3
}
11.在嵌套循环中使用break 和 continue:
//break:
for(int i=0;i<3;i++){
for(int j=0;j<5;j++){
System.out.println("i="+i+"=========");
if(j==2){
break;
System.out.println("j="+j);
//当j=2时候循环本轮结束
}
}
}
输出结果:
i=0=========
j=0
j=1
i=1=========
j=0
j=1
i=2=========
j=0
j=1
//continue
for(int i=0;i<3;i++){
for(int j=0;j<5;j++){
System.out.println("i="+i+"=========");
if(j==2){
continue;
System.out.println("j="+j);
//当j=2时候循环本轮结束
}
}
}
输出结果:
i=0=========
j=0
j=1
j=3
j=4
i=1=========
j=0
j=1
j=3
j=4
i=2=========
j=0
j=1
j=3
j=4
- 注意,默认情况下,在嵌套循环中,break和continue只能默认对当前循环其作用。
break 和 continue 异同:
- 相同点:break和continue都可以使用在for循环、while、do-while循环中;break和continue只能默认对当前循环其作用。
- 不同点1:break还可以在switch中使用,break 的意思退出,结束当前的循环或switch代码。
- 不同的2:continue 的意思是结束本次循环,让循环直接进入下一次的运行。