结构: 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(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);
有三种情况
结构:
int num=11;
if(num%2==0) {
System.out.println("偶数");
}else if(num==11){
System.out.println("11");
}
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);
}
}
简单来说,递归就是写法就是给出最底层的是什么,然后通过上层,一层一层的找关系,一直找到最底层给出的数据,再往回计算输出你需要的数据。就是一条链,有彼此之间的关系以及底层数据,通过关系和底层数据得出结果,所以很耗内存