1. 课程介绍
-
- 选择结构if switch(掌握)
-
- 循环结构 while do-while for(掌握)
-
- 循环控制语句(掌握)
-
- 递归函数(理解)
2 选择结构
2.1为什么学习选择结构
让程序有选择性的执行代码;
场景1:模拟qq登录
如果:用户名密码正确–》登录成功
如果:用户名密码错误–》登录失败
场景2:
2.2 if
语法结构:
If(x){
当x为true的时候执行我括号里面的代码,否则不执行
}
X可以是boolean值,或者是运算为boolean值类型
- 语法结构1:
> If(x){
> 如果x==true那么就执行代码块中的代码,否则不执行
> }
> X:布尔值或者结果值为布尔的表达式
.int a = 20;
if(a\<=20){
System.out.println("自动充电!");
}
if(a\>20 && a\<=100){
System.out.println("自动办公!");
}
- 语法结构2:
> If(x){
> 若x为true则执行大括号中的代码,否则不执行
> }else{
> 若x为false则执行括号中的代码,否则不执行
> }
.int a = 20;
if(a\<=20){
System.out.println("自动充电!");
}else{
System.out.println("自动办公!");
}
- 语法结构3:
> If(条件1){
> 如果条件1满足,那么就执行括号中的代码,否则不执行
> }else if(条件2){
> 如果条件2满足,那么就执行括号中的代码,否则不执行
> }else if(条件3){
> 如果条件3满足,那么就执行括号中的代码,否则不执行
> }else if(条件4){
> 如果条件4满足,那么就执行括号中的代码,否则不执行
> }else if(条件5){
> 如果条件5满足,那么就执行括号中的代码,否则不执行
> }else{
> 以上条件都不满足,则执行括号中的代码
> }
> 注意:if后面的{}可以省略的,没有{}它只管一行代码(不推荐使用)
目的:我们主要来判断是,或者不是,对,或者不对
2.3 switch
- 语法结构
> switch(变量){
> case 变量可能值1:
> 功能执行语句1;
> .............
> break;
> case 变量可能值2:
> 功能执行语句2;
> .............
> break;
> case 变量可能值3:
> 功能执行语句3;
> .............
> break;
> default:
> 功能执行语句;
> }
变量:可以有的类型 byte short char int enum(枚举,java5开始支持的) String
java7开始支持的 目的:我们主要用来选择多个确定的值
3 循环结构
3.1 为什么学习循环结构
生活中比较常见的循环:
吃饭,睡觉,看片,撸代码
单曲循环
歌曲列表循环
…
程序中:
> 如:打印一句话:java是世界上最好的语言 100次
> System.out.println(“java是世界上最好的语言”);
> System.out.println(“java是世界上最好的语言”);
> System.out.println(“java是世界上最好的语言”);
> System.out.println(“java是世界上最好的语言”);
> System.out.println(“java是世界上最好的语言”);
> .........
不用依次去打,在java中已经给我们提供了循环结构,我们只需要把重复的语句放在结构中,只需要设置循环次数,它就会自动给我们打
Java中循环结构:for do-while while
3种循环作用都是一样的,它们之间可以互相替换的,只是语法结构不一样
3.2 while的基本循环
while语句的语法
while(x){
若x满足其条件则循环该代码快中的内容
}
x:它是一个boolean值或者结果为boolean的一个值
x:boolean值,或者结果为boolean的值
注意:while(x) x是不能直接写false,编译器报错
3.3 do-while基本循环
语法结构:
do{
循环体
}while(x);
x:它是一个boolean值或者结果为boolean的一个值
do-while执行流程:
不管x满不满足条件 循环体都会执行一次
3.4 for循环(重中之重)
语法结构:
for(①初始化值;②条件;③最后执行的代码){
④循环体
}
for循环执行的流程:
-
①–》②–》④—》③
-
②–》④–》③
-
②–》④–》③
-
②–》④–》③
-
②–》④–》③
-
②–》④–》③
-
。。。。。。。。。。。
3.5常见面试题
上面的代码打印的值?
循环了几次?
判断了几次?
最后i的值是多少?
4 双层for循环
4.1语法结构:
for(初始化值;条件;最终执行的代码){
for(初始化值;条件;最终执行的代码){
}
}
注意:for循环不宜嵌套太多for循环,最多2层即可,多了之后对性能很差
For循环的无限循环
for(;;){
}
4.2练习
4.3加强for循环 foreach(了解)
(1) foreach作用
作用: 主要是用来遍历数组和集合的;
缺点: 没有索引,凡是涉及有索引相关操作还是用普通for循环,
(2)语法结构
for(源中元素类型 e : 源 ){
直接使用e就可以了
}
源 : 可以是数组或者集合(Iterable接口的实现类)
遍历一个数组也可以使用我们今天学的for循环
5.循环控制语句
5.1 break
①结束当前这一层循环
②验证结束当前这一层
准备嵌套语句
可以给循环添加标签,让break跳出指定的标签
注意:循环嵌套不宜嵌套太多太深,影响性能,一般2层
5.2 continue跳过一次循环
场景:比如每天干的事情:吃饭 睡觉 打代码
但是我在星期六,不想吃饭,应该怎么办,可以用continue
5.3 return
return 表示结束当前方法
注意 break continue return 后面不能有其它的代码,因为永远执行不到
6.递归函数(了解)
简单理解就是自己调用自己,直到满足一个条件结束自己调用自己的过程,这个就是递归。例子:电影院
(1)使用递归求出 斐波拉切数列
/\*\*
\* 什么是递归呢?就是方法自己调用自己
\* StackOverflowError : 堆栈溢出
\*/
public static void main(String[] args) {
//main(args);
System.out.println(f(1));
System.out.println(f(2));
System.out.println(f(3));
System.out.println(f(5));
}
/\*
\* 斐波拉切数列
\* f(0) = 0;
\* f(1) = 1;
\* .....
\*
\* f(n) = f(n-1)+f(n-2); n\>=2
\* f(5) = f(4)+f(3); 5
\* f(4) = f(3)+f(2); 3
\* f(3) = f(2)+f(1); 2
\* f(2) = f(1)+f(0); 1
\*
\*/
public static int f(int n){
if(n==0){
return 0; //50%
}else if(n==1){
return 1; //99.9999%
}
return f(n-1)+f(n-2);
}
}
(2)使用递归函数 等差数列求和f(x) = n*(n+1)/2
使用递归的时候呢,一定要给它一个出口,return,就会结构本次方法,返回一个值,否则就是一个无限的嵌套递归,造成堆栈溢出
7.练习
1.请自己读下列的代码,跟踪分析变量i的值的变化过程。
public class Test{
public static void main(String[]args){
int i=5;
i++;
System.out.println("i="+i); //6
++i;
System.out.println("i="+i);// 7
int a=++i;
System.out.println("a="+a); //a=8
System.out.println("i="+i); //a=8
int b=i++; b=8;
System.out.println("b="+b);//算出来b=9 //算之前b=8!!!!!!!!!!
System.out.println("i="+i); //i=9
}
}
2.考试成绩分等级。
90~100 A等。
80-89 B等。
70-79 C等。
60-69 D等。
60以下E等。
请写一段程序,给定不同的成绩,输出对应的等级。
public static void main(String[] args) {
Show(90);
}
public static void Show(int score) {
String s = null;
if(score\<=0&&score\>100) {
System.out.println("分数不合法");
}else if(score\>=90) {
s = "A";
}else if(score\>=80) {
s= "B";
}else if(score\>=70) {
s= "C";
}else if(score\>=60) {
s= "D";
}else {
s= "E";
}
System.out.println(s);
}
3.使用for循环计算1-10的积
public static void main(String[] args) {
int sum = 1;
for(int i=1;i\<=10;i++) {
sum\*=i;
}
System.out.println(sum);
}
4.计算 1! + 2! + 。。。10! 1到10的阶乘和
public static void main(String[] args) {
int sum = 0;
for(int i=1;i\<=10;i++) {
sum+=Number(i);
}
System.out.println(sum);
}
public static int Number(int n) {
if(n==1) {
return 1;
}
return n\*Number(n-1);
}
5.使用嵌套循环打印下面图形
> public static void main(String[] args) {
> for(int i=1;i\<10;i++) {
> for(int j=1;j\<=i;j++) {
> System.out.print(j+" ");
> }
> System.out.println();
> }
> }
- 定义一个方法,接受三个int参数,返回最小的一个数。
> public static void main(String[] args) {
> System.out.println(Show(5, 2, 1));
> }
> public static int Show(int a, int b, int c) {
> if (a \< b) {
> if (a \< c) {
> return a;
> } else {
> return c;
> }
> } else if (b \< c) {
> return b;
> } else {
> return c;
> }
> }
- 求出100以内前5个3的倍数的数字。(请使用for 并且结合break 实现)
> public static void main(String[] args) {
> int sum = 0;
> for(int i=1;i\<100;i++) {
> if(i%3=\=0) {
> System.out.println(i);
> sum++;
> }
> if(sum==5) {
> break;
> }
> }
> }