JavaSE入门:JavaSE程序基础——流程控制与递归运算

流程控制

for

结构: for(初始值;终止条件;步长){}
注意: 初始值定义的数据只作用于循环里面,外面无法调用;在这里有死循环的情况,就是终止条件永远执行不到,相当于true;还有就是这三个可以都不写,但是格式要求必须要写上那两个分号。

//		死循环,即是执行不完的      注意条件这里可以什么都不写   但是;;两个分号必须存在		
//		  for(;;) 
//		  { System.out.println(1); }
//		 这里注意int i只作用与for循环内   在外边无法调用    如果想作用与循环外,就定义在循环外
		for (int i = 0; i < 5; i++) {
			System.out.println(i);
		}
//		报错
//		System.out.println(i);

while

while又叫真假循环
结构: while(终止条件){不符合终止条件就执行的语句;}

/*
		 * while  真假循环
		 * 语法结构     while(boolean表达式){}
		 */
		int i=5;
		while(i<10) {
			System.out.println(i);
			i++;
		}

do()while{}
判断条件在while前面,相比较while,do()while{}最少执行一次

/*
		 * do     while   
		 * 语法结构  do{}while(boolean表达式)
		 * 最少执行一次
		 */
		do {
			System.out.println(i);
		}while(i<7);

if

有三种情况
结构:

  • 单分支:if(boolean 表达式){},结果只有一种
  • 双分支:if(boolean表达式){}else{},结过有两种
  • 多分支:if(boolean表达式){}else if(boolean 表达式){}else if(boolean表达式){}…可以是else结尾也可以是else if结尾 ,这是大于等于两种的情况
		int num=11;
		if(num%2==0) {
			System.out.println("偶数");
		}else if(num==11){
			System.out.println("11");
		}

switch

switch与case,break,default连用,case是用来对给出的值是否相符做判断,个数没有限制,break是防止穿透现象,default用于最后相当于if里面的else

	char  c='A';
//		注意赋值是单引号不是双引号
		switch(c) {
//		注意这个‘A’是因为定义的是char  如果是 int  i=3     那么这里case 3:
		case'A': 
			System.out.println("优秀");
			break;
		case'B':
			System.out.println("良好");
			break;
		case'C':
			System.out.println("及格");
			break;
		default:
			System.out.println("差");
			break;
		}
		//结果:优秀

如果break用的不恰当会产生穿透现象

//		这是穿透现象
		char  c='A';
		switch(c) {
		case'A': 
			System.out.println("优秀");
		case'B':
			System.out.println("良好");
			break;
		case'C':
			System.out.println("及格");
		default:
			System.out.println("差");
			break;
		}
		//结果:
		//		优秀
		//		良好

case如果多个条件都是一个输出结果那可以合并

//		case 的合并
//		如果出现输出结果一样的可以合并用一个输出
		char c_1='B';
		switch(c_1) {
		case'A': 
		case'B':
		case'C':
			System.out.println("及格");
			break;
		default:
			System.out.println("差");
			break;
		}
		//结果:及格

递归

概念: 用在方法中,在方法体内部调用当前方法 就是自己调用自己

应用场景 : 一般树状结构的都可以使用递归查询

注意: 递归比普通的算法耗内存,运行效率低,谨慎使用。能用循环搞定,尽量不用递归

常见问题 : 需要删除一个目录下所有的文件以及子文件,类似的树状结构需求 斐波那契数列这种有规律的也可以 累加加和; 阶乘 ;汉诺塔 等

//	递归求1到100累加和
	public static int m1(int n) {
//		最终终止状态
		if(n==1) {
			return 1;
		}else {
//			递归    不停的压栈直至压到n=1,返回1
			return n+m1(--n);
		}

斐波那契数列:

 /* 斐波那契数列 : 前两位是1 , 其他每一位都等于前两位的和
 * 
 * 方法传入的参数是位数 比如传入10 就是要计算第10位的值是多少
 * 
 * 1 1 2 3 5 8 13 21 34 55 89
 */

/*
 * 递归实现斐波那契数列  输入n值就是第n个数值时=是什么
 */
	
	public static int fibonacci(int n) {
//		斐波那契数列最少一位,如果小于1则返回-1
		if(n<1) {
			return -1;
		}
//		斐波那契数列前两位是1
		if(n==1||n==2) {
			return 1;
		}
//		斐波那契数列从第三位开始就是等于前两位的加和,所以递归调用最终会压栈到第一位和第二位
		return fibonacci(n - 1) + fibonacci(n - 2);
	}
}

简单来说,递归就是写法就是给出最底层的是什么,然后通过上层,一层一层的找关系,一直找到最底层给出的数据,再往回计算输出你需要的数据。就是一条链,有彼此之间的关系以及底层数据,通过关系和底层数据得出结果,所以很耗内存

猜你喜欢

转载自blog.csdn.net/lfz9696/article/details/107740545