流程控制

顺序结构

按代码顺序从上至下执行(不存在分支、选择、循环结构时的默认结构)

分支结构 if

单if结构

if(条件){
		语句}
条件满足-语句执行
条件不满足-语句不执行

标准if…else结构

if(条件){
		语句1}
else{
		语句2}
条件满足-执行语句1
条件不满足-执行语句2

一定会执行一个语句

多种条件结构if…else if…else

if(条件1){
		语句1}
else if(条件2){
		语句2}
else if(条件3){
		语句3}
	...
else{
		语句n}

- 一定会执行一个语句
- 依次判断每一个条件,当有一个条件满足时,执行条件下面对应的一条语句(后面的其他条件不再判断,语句不再执行)
- 任何条件都不满足时执行语句n
- 注意确保条件间的互斥!!!
int age=46;
if(age<18){
		System.out.println("未成年");
		}else if (age<24) {
			System.out.println("青年");
		}else if (age<35) {
			System.out.println("青壮年");
		}else if (age<50) {
			System.out.println("中年");
		}else if (age<65) {
			System.out.println("中老年");
		}else {
			System.out.println("老年");
		}
		//输出 中年;

嵌套if…else…

  • 任意组合if 与 if…else 与 if…else if…else

  • 不可以单纯出现else,if else之间不能出现代码段!

      if(条件1:一般为先决条件){
      	if(条件2){
      		语句1
      	}else if(条件3){
      		语句2	
      	}else{
      		语句3
      	}
      }else{
      语句4:一般为先决条件的错误提示
      }
    

选择结构 switch…case

  • 计算表达式的结果,将结果按顺序依次与case后的值比较,相等时执行对应语句并跳出switch(其他语句不再执行);没有任何一个相等时执行default对应语句并跳出switch;

  • switch后面的表达式
    表达式结果只能是 byte、short、int、char、 枚举类型、String 类型;Boolean、long、float、double、语句都不可以!!!

  • case
    case后的值不能重复;case后的值的类型必须=表达式结果的类型(以便判断是否相等)

  • default
    default 语句的位置不影响switch语句内的执行顺序,即即便把default放到最前面,也会在最后(没有任一case后值=表达式结果值时)进行判断;

      switch(表达式){
      	case 值1:
      		语句1;
      		break;//(可省略)
      	case 值2:
      		语句2;
      		break;	//(可省略)
      	case 值3:
      		语句3;
      		break;//(可省略)
      	...
      	default://(可省略)
      		语句n;
      		break;//(可省略)
      }
    
  • break
    当发现表达式结果=case后的值时,所有的case失效,相当于直接 从符合情况的case后面的语句开始执行,到发现break为止跳出switch ,没有break的话执行语句具有穿透性,即全部执行完跳出switch;
    如下案例:利用switch的穿透性计算输入的日期在今年是第几天!

//思路:倒叙写月份,以便向前(向下)不停加总天数;(如果正序写,会从当前月份往后加,就错了)
import java.util.Scanner;

public class Test6 {
		public static void main(String[] args) {
			System.out.println("请输入月份");
			Scanner scanner=new Scanner(System.in);
			int month =scanner.nextInt();
			System.out.println("请输入日期");
			Scanner scanner2=new Scanner(System.in);
			int day =scanner2.nextInt();
			int sum=0;
			switch (month) {
			case 12:
				sum=sum+30;
			case 11:
				sum=sum+31;
			case 10:
				sum=sum+30;
			case 9:
				sum=sum+31;
			case 8:
				sum=sum+31;
			case 7:
				sum=sum+30;
			case 6:
				sum=sum+31;
			case 5:
				sum=sum+30;
			case 4:
				sum=sum+31;
			case 3:
				sum=sum+28;
			case 2:
				sum=sum+31;
			case 1:
				sum=sum+day;
		}
			System.out.println(sum);
	}
}

案例2:

//语句2-语句n全都会执行
switch(表达式结果为值2){
	case1:
		语句1;
	case2:
		语句2;
	case3:
		语句3;
	...
	default:
		语句n;
}

案例3:

//语句1到语句4都会被执行
switch(表达式结果为值1){
	case1:
		语句1;
	case2:
		语句2;
	case3:
		语句3;
	case4:
		语句4;
		break;
	case5:
		语句5;
	...
	default:
		语句n;
}

循环结构 for;while;do…while;

while

四要素

初始值 (用于循环条件的判断)
从什么情况开始做?
初始值满足循环条件则最优先执行且仅执行一次
循环条件
什么情况下一直做?
判断条件是否满足,满足则执行循环体,执行完毕后再执行循环,直到条件不满足,结束循环。
循环体
一直做什么?
控制计数器
现在进行到什么情况了?
如果控制计数器只是个计数器,与要执行的语句没有关系的话,初始值和计数器计数方式不限,只要保证对循环次数控制的效果即可!
如果计数器与打印结果有关,务必注意初始值、循环条件和计数器位置的设置~!(初始从0还是从1开始、循环条件是否含等号、计数器放在执行前还是后)

//while打印10个星号*
int i =1;//初始值 从准备打印第一个开始
while(i<=10){ //循环条件   到 准备打印第十个 都一直打印
	System.out.println("*");//循环体    打印星号
	i++;//控制计数器    已经打印了1个,准备打印第二个
}
//for打印10个星号*
for(int i =1;i<=10;i++){ //初始值;循环条件;控制计数器
	System.out.println("*");//循环体
}
  • break
    与选择语句中类似,遇到break,跳出整个循环
    break往往可能在循环中的嵌套语句(条件)内,但跳出是跳出整个循环,而不是跳出break所在的大括号
  • continue
    从当前语句直接跳到循环的开始(跳过当前这一次的后面部分);
    一般用于跳过某些情况,如不及格的成绩
//利用continue实现跳过5,打印1-10
public class Test5 {
	public static void main(String[] args) {
		int i=0;
		while(i<10){
			i++;
			/*if(i==5){
				continue;
			}
			System.out.println(i);*/
			
			if(i!=5){
				System.out.println(i);
				
			}else{
				continue;
			}
		}
	}
}

do…while

初始化;
do{
	执行语句功能
	控制计数器
}while(循环条件);

执行语句功能一定会被执行一次!若初始值不满足循环条件,也会执行,可能造成逻辑错误! 不推荐使用

for

for(初始化;循环条件;控制计数器){
	执行语句功能;
}
  • 计数器的声明和初始化如果都在for的()内,则其作用域仅在for循环内;如果for外面需要用到,则应在for外定义。如果for循环外面用不到,建议在里面定义,可以及时被释放掉,节约内存

对比for和while

for循环常用场景:能够知道循环次数时;
while循环常用场景:网络编程(信息交互)、I/O流(文件存读)、数据库、其他情况下无法知道循环次数时

死循环

==死循环后面的语句是无法被执行的(编译都会报错),如果死循环后要写语句,这个死循环必须有跳出动作 (break,returnsystem.exit(0) ==

  • for( ; ; ) { }
    循环条件置空即可,初始值和计数器可置空可以不置空

  • while (true) { }

  • do { } while (true) ;

使用场景:当无法确认循环条件的临界点,只有执行过程中才能判断时,使用死循环,然后在循环内做判断并break

//输出每一个字符,直到遇到第一个数字时停止
public static void main(String[] args) {
		String s="ABCabc123@#$";
		for(int i=0;;i++){
			char c=s.charAt(i);
			if(c>='0'&&c<='9'){
				break;
			}
			System.out.print(c);
		}
		
	}

循环嵌套

public static void main(String[] args) {
		for(int i=0;i<5;i++){
			for(int j=0;j<5;j++){
				System.out.print("* ");
			}
			System.out.println("");
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值