【黑马程序员】Java基础学习总结博客——流程控制

------- android培训java培训、期待与您交流! ----------

一、顺序结构

  任何编程语言中最常见的结构就是顺序结构。顺序结构就是程序从上到下遂行的执行,中间没有任何的判断和跳转。

  如果main方法的多行代码之间没有任何流程控制。则程序总是从上向下依次执行,排在前面的代码先执行,排在后面的代码后执行。这意味着:如果没有流程控制,Java方法里的语句是一个顺序执行流。从上向下一次执行每条语句。

二、分支结构Java提供了两种分支结构:if语句和switch语句,其中if语句使用布尔表达式或布尔值作为分支条件进行分支控制而switch语句则用于对多个整数值进行匹配,从而实现分支控制。

if条件语句有如下三种形式:

第一种:

          if(logic expression)
		{
			statement。。。。。
		}


 

第二种:
          if(logic expression)
		{
			statement。。。。。
		}
		else
		{
			statement。。。。。
		}

第三种:

                if(logic expression)
		{
			statement。。。。。
		}
		else if(logic expression)
		{
			statement。。。。。
		}
		else//最后的else语句也可以省略
		{
			statement。。。。。
		}

注意:if  else ,else if 后的条件执行体要么是花括号扩起来的一个代码块,则整个代码块整体作为条件执行体;要么是以分号结束的一行语句,那么就就是这条语句作为条件执行体。如果if后有多条语句作为条件执行体,若省略了整个条件执行体的花括号,则会引起编译错误或者执行语句执行不到。

 

 

对于if语句还有一个很容易出现的逻辑错误:

package javase_day01;

public class 流程控制语句 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int age = 60;
		if(age>20){
			System.out.println("青年人");
		}
		else if (age>30) {
			System.out.println("中年人");
		}
		else if (age>50) {
			System.out.println("老年人");
		}
		else {
			System.out.println("不是人");
		}
	}

}

表面上看起来上卖弄程序没有任何问题:人的年龄大于20是青年人大于30是中年人,年龄大于50是老年人等。但运行上面程序,发现打印结果是:青年人

而实际上我们希望判断出来的60岁时老年人,这显然出现了一个问题。

 

对于任何ifelse语句表面上看起来else后没有任何条件,或者elseif后面只有一个条件但是这不是真相:因为else的含义是否则——else本身就是一个条件:else隐含的条件就是对前面条件取反。因此上面代码实际可改写为

package javase_day01;

public class 流程控制语句 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int age = 60;
		if(age>20){
			System.out.println("青年人");
		}
		else if (age>30 && !(age>20)) {
			System.out.println("中年人");
		}//在原本的条件中增加了else的隐含条件。
		else if (age>50 && !(age>20) && !(age>30 && !(age>20))) {
			System.out.println("老年人");
		}
		else {
			System.out.println("不是人");
		}
	}

}


如果每次都去计算if条件和else条件的交际也是一件非常繁琐的事情,为了避免上面出现的错误,在使用if else语句时有一条基本规则:总是把优先 把范围小的条件放在前面处理。如age>50何age>30这两个条件,明显age>50范围更小,所以应该先处理age>50的情况!


switch分支语句:和if语句不同的是switch语句后面控制的表达式类型只能是byte short char int string和枚举。

switch语句的代码格式如下:

package javase_day01;

public class switch语句 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		switch(表达式值)
		{
		case 值1:
			statement;
			break;
		case 值2:
			statement;
			break;
		case 值3:
			statement;
			break;
		default :
			statement;
		}
	}

}

和if语句不同的是,switch语句中各case标签后代码块的开始点和结束点非常清晰,因此完全可以省略case代码块后的花括号。

与if语句中的else类似,switch语句中的default标签看似没有条件,其实是有条件的,条件就是表达式值不能与前面任何一个标签值相等。

还有一点需要注意的是如果省略了switch后的break语句,在满足条件向下执行的时候会一直向下执行直到遇到大括号或者break为止。

总之:if和switch语句都能实现多分枝结构,但switch只能处理等值条件的判断,且条件是整形变量或者字符型变量的等值判断,一般适应于多余5个以上的情况。

而if特别适合某个变量在某个区间时的情况。

 循环结构:

while循环语句的语法格式如下:

package javase_day01;

public class while循环语句 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		while(布尔型的值或者表达式)
		{
			statement;
		}
	}

}

while循环语句在每次执行循环体之前先对循环体条件求值,如果为true则运行循环体部分。

注意几点:1,在使用循环体时,一定要保证循环条件有变成false的时候,否则整个循环将会成为死循环。

                   2,尽量不要省略后面的花括号,这样会造成程序的可读性降低,并可能引发错误

                  3,除此之外while循环体后紧跟一个分号。比如有下面一段程序

package javase_day01;

public class while循环语句 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int count = 0;
		while(count <10);
		{
			System.out.println("不停执行死循环"+count);
			count--;
		}
	}

}

这段程序会导致后面的循环体执行不到就结束,并且还是一个死循环,看不到结果!分号后面的代码块与循坏体没有任何关系,在分号哪里结束!

 

do while 循坏:与while循环不同的是while循坏先判断循环条件,在执行循环体,而dowhile则先执行一次循环体在回来判断循环条件,也就是说无论循环条件真假,循环体都会执行一次。代码格式如下

package javase_day01;

public class while循环语句 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int count = 0;
		do
		{
			System.out.println("不同执行死循环"+count);
			count--;
		}while(count <10);
	}

}

与while循环不同的是dowhile循环条件后必须有一个分号,整个分号表示循环结束!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值