第二章流程控制
一:学习目标
知识点 | 知识点重要性 | 掌握程度 | 知识点关联 |
选择控制语句 1、 if 2、 if-else 3、 switch | 极高 | 熟练 | 学习选择控制语句过程中需要进行逻辑的判断,所以经常会用到boolean数据类型和逻辑运算符,同时选择控制语句与之前面学习的条件运算符功能很类似,但选择控制语句的功能会更强大一些,学习好该技能点才能写出高效的代码 |
循环语句 1、while 2、do-while 3、for | 极高 | 熟练 | 学习循环语句过程中需要进行逻辑判断和变量的增加和减少,所以经常会用到逻辑运算符和算术运算符(++,--),学习好该技能点才能写出高效的代码 |
跳转语句 1、 continue 2、 break 3、 return | 高 | 熟练 | 因为跳转语句的应用场合就是在选择控制语句、循环语句应用,所以学习跳转语句时一定是结合这两种语句一起进行学习的 |
二:重难点知识点
1、重难点1:选择控制语句
学习方法:
1、 首先要掌握选择控制语句if、if-else、switch的语法结构,具体语法结构如下:
if条件语句:一种程序结构,当条件成立时才执行条件体内的语句。
语法:
if ( 条件 ) { //语句 } | if ( 条件 ) { //语句1 }else { //语句2 } | if ( 条件 ) { //语句 } else if ( 条件 ) { //语句 } else { //语句 } |
switch语句:一种程序结构,类似于一组条件结构,但是只能用于整型和字符型的等值判断。
语法:
switch (表达式) { case 常量1: //语句; case 常量2: //语句; default: //语句; } |
2、 总结每种选择控制语句的特点和适用的场合
(1)if条件语句适合于判断条件较少的情况
(2)if-else和switch都适合于判断条件较多的情况
(3)if和if-else优点是应用场合比较广泛,只要是用于处理条件判断的都可以用,但是缺点是如果逻辑判断层数较多时程序可读性较差
(4)switch语句应用场合较少,只局限于整型和字符型的等值判断,但使用switch语句编写条件判断可读性较强
所以根据三种
3、 在学习if语句时需要注意以下几点:
(1)编写条件表达式时应多使用小括号来决定执行顺序,不要依赖于运算符的优先级
例如:需求1:两个数相加后再除5能大于10,我就打印输出“逻辑正确”四个字
int i=10;
int j=9;
/*下面为错误的写法,因为在写条件表达式时由于没有使用小括号对执行顺序进行控制,导致执行后逻辑错误*/
if(i+j/5>10){
System.out.println("逻辑是错误的");
}
/*下面为正确的写法*/
if((i+j)/5>10){
System.out.println("逻辑是正确的");
}
(2)即使条件体中的操作只有一步也要加上大括号,并且保证代码有缩进,代码可读性增强
例如:
/*下面写法不会影响程序执行,但程序可读性较差 */
if((i+j)/5>10)
System.out.println("逻辑是正确的");
/*下面写法为正确写法 */
if((i+j)/5>10){
System.out.println("逻辑是正确的");
}
(3)如果是多个等值判断的情况就要考虑使用switch结构代替if条件结构
例如:需求2:从键盘获得一个1——7的数字,根据这个数字对应周一到周日,判断后打印输出周一到周日都要做哪些事情
/*使用if-else语句编写功能上可以实现,但程序的可读性较差*/
intwday=0;
Scanner input=newScanner(System.in); //创建Scanner对象
System.out.println("请输入1——7的数字");
wday=input.nextInt(); //获得键盘输入
if(wday==1){
System.out.println("今天要学习C#入门");
}else if(wday==2){
System.out.println("今天要学习C#程序逻辑结构");
}else if(wday==3){
System.out.println("今天要学习C#数组");
}else if(wday==4){
System.out.println("今天要学习构建布局良好的窗体");
}else if(wday==5){
System.out.println("今天要学习窗体控件编程");
}else if(wday==6){
System.out.println("今天要学习类和对象");
}else if(wday==7){
System.out.println("今天要学习封装");
}
/*使用switch语句编写,程序的可读性增强*/
int wday=0;
Scanner input=newScanner(System.in);//创建Scanner对象
System.out.println("请输入1——7的数字");
wday=input.nextInt(); //获得键盘输入
switch(wday){
case 1:
System.out.println("今天要学习C#入门");
break;
case 2:
System.out.println("今天要学习C#程序逻辑结构");
break;
case 3:
System.out.println("今天要学习C#数组");
break;
case 4:
System.out.println("今天要学习构建布局良好的窗体");
break;
case 5:
System.out.println("今天要学习窗体控件编程");
break;
case 6:
System.out.println("今天要学习类和对象");
break;
case 7:
System.out.println("今天要学习封装");
break;
}
4、 在学习switch语句时需要注意以下几点:
(1)只能进行等值判断,而且只适用于整数和字符,浮点型和字符串不适用
例如:下面写法都是错误的
Stringwday;
Scanner input=newScanner(System.in);
System.out.println("请输入java或C#");
wday=input.next();
switch(wday){
case "C#":
System.out.println("我们要学习C#");
break;
case "java":
System.out.println("我们要学习java");
break;
(2)一般来说每个case中的操作最后一步要使用“break”来终止switch结构,否则会继续执行后面的内容,具体见上面的需求2的例子
(3)default放在什么位置效果都是一样的,但如果是放在前面,就一定要加上“break”,以此来结束程序执行,否则如果条件都不匹配时会执行default,然后会执行default下面第一个case的内容
例如:把需求2进行简单改动,增加default语句
/*使用switch语句编写,注意default的位置,查看运行结果 */
int wday=0;
Scanner input=newScanner(System.in);//创建Scanner对象
System.out.println("请输入1——7的数字");
wday=input.nextInt(); //获得键盘输入
switch(wday){
default:
System.out.println("没有对应项");
case 1:
System.out.println("今天要学习C#入门");
break;
case 2:
System.out.println("今天要学习C#程序逻辑结构");
break;
case 3:
System.out.println("今天要学习C#数组");
break;
case 4:
System.out.println("今天要学习构建布局良好的窗体");
break;
case 5:
System.out.println("今天要学习窗体控件编程");
break;
case 6:
System.out.println("今天要学习类和对象");
break;
case 7:
System.out.println("今天要学习封装");
break;
}
运行结果如下:
(4)由于不需要使用大括号,所以一定要注意代码的缩进,以保证代码的可读性
2、重难点2:循环语句
学习方法:
1、 首先要掌握循环语句while , do-while , for的语法结构,具体语法结构如下:
循环语句:一种程序结构,当循环条件成立时一直会执行循环体内的语句,直到条件不成立才会停止执行循环语句,执行后续程序内容。
使用场合:需要多次重复执行一个或多个任务的问题考虑使用循环来解决
语法:
while ( 循环条件 ) {
// 循环语句; // 循环语句
} | do{
// 循环语句; // 循环语句
}while(循环条件); | for(表达式1;表达式2;表达式3){
//循环语句; //循环语句;
} 说明: 表达式1多用为循环参数初始化 表达式2多用为循环条件判断 表达式3多用为更新循环变量 |
2、 总结每种循环控制语句的特点和适用的场合
a) while:用于先判断后执行的情况
b) do-while:用于先执行一次,后判断的情况
c) for:用于先判断;后执行的情况,与while相同,但是从代码上来说更加简洁
d) 初始情况不满足循环条件时
i. while和for循环内的循环语句一次都不会执行
ii. do-while循环不管任何情况都至少执行一次
e) 以下为各个循环语句的流程图
f) 通过案例分析各个循环语句执行的顺序:
案例:分别用while,do-while,for输出1到10的和。
以上语句中,表示程序执行的先后顺序。
其中只执行一次,是循环参数的初始化语句。
当循环条件 成立时,循环语句将一直被执行。直到i=10时,由于循环条件 i<10不成立,则停止循环语句。执行后续其他代码。
注意其中的这个语句,如果没有,则i永远是0,那么循环将一直执行下去,我们称为“死循环”。所以在使用循环时,一定要注意循环参数的更改。
3、 在学习循环语句时需要注意以下几点:
a) 循环变量是否初始化,是否更改
b) 使用循环时经常出现问题,可以采用程序调试的步骤来找到问题:
iii. 猜测出错位置,设置断点
iv. 单步运行
v. 观察变量
vi. 发现问题
vii. 修正代码,重新运行
viii. 解决问题
4、 案例:
编写程序,实现控制台的猜数字游戏。游戏运行时产生一个0-1000之间的随机整数,要求用户从控制台输入数字,若输入的数字比产生的数字小,则输出:“太小了,再大一点!”;若输入的数字比产生的数字大,则输出:“太大了,再小一点!”,若输入的数字和产生的数字相等,则输出:“恭喜你猜对了!”然后退出程序;若用户猜了10次还未猜对,则输出:“你太笨了,下次再来吧!”然后退出程序
packagecom.jbit.play;
importjava.util.Scanner;
publicclass Play {
int num = (int) (Math.random() *1000);//获得到1000以内的随机数
Scanner input = new Scanner(System.in);
public void compare() {
int i = 1;
while (i <=10) {
System.out.println("请输入整数:");
int playerinput =input.nextInt();//获得到控制台输入的整数,没有做判断
if(i==10){
System.out.println("你太不走运了,没在10次之内蒙对,我来告诉你你猜的数字是"+num);
break;
}
if (playerinput >num) {
System.out.println("你输入数的大了,请输入小一点的,你还有" + (10 - i) + "次蒙的机会");
i++;
continue;
} else if(playerinput < num) {
System.out.println("你输入数的小了,请输入大一点的,你还有" + (10- i) + "次蒙的机会");
i++;
continue;
}else if(playerinput==num){
System.out.println("你蒙对了,其实你还有" + (10 - i) + "次蒙的机会");
i++;
System.exit(0);
}
}
}
public static void main(String[] args){
Play play = new Play();
play.compare();
}
}
3、重难点3:跳转语句
1、 break:改变程序控制流
break作用:用于do-while、while、for中时,可跳出循环而执行循环后面的语句。
2、 continue:只能用在循环里
continue 作用:跳过循环体中剩余的语句而执行下一次循环
3、 return:退出当前方法
4、 break、continue、return的区别:
a) break直接跳出循环,执行后续程序代码
b) continue不跳出循环,只是跳过当前循环的后续未操作内容,直接进入下一次循环
c) return:退出当前方法
5、 案例:
求1~10之间的所有偶数和
intsum=0; //定义一个变量,进行累加
for(inti=1;i<=10;i++){
if( i % 2 == 1){
continue; //如果i为奇数,结束本次循环,进行下一次循环
}
sum=sum+i;
}
System.out.print("1--10之间的偶数和是:"+sum);
注意:
a) 如果这个案例中不用continue,而是使用break,那么在第一次循环i=1时,就执行了break语句,程序将跳出整个for循环,执行for后面的程序代码,sum的值不会改变,还是0。所以会打印出“1—10之间的偶数和是:0”
b) 如果这个案例中用的是return,则在第一次循环i=1时,就执行了return语句,程序将直接跳出main()方法,连后面的打印语句也不会执行。
共性问题
1、条件表达式如果不使用括号控制优先级的后果是什么?
答:程序阅读性差,并且容易导致逻辑错误
2、条件结构中如果不使用大括号或缩进不整齐的后果是什么?
答:程序不易读,会产生歧义,可维护性差
3、switch结构中不使用“break”控制程序结束的后果是什么?
答:会导致程序逻辑错误
辅导视频
见辅导视频文件中的视频文件,内容为myeclipse调试步骤
作业内容
请用代码实现以下需求
需求1:(多重if的使用)
对学员的结业考试成绩进行评测。
成绩>=90:优秀
成绩>=80:良好
成绩>=70:中等
成绩>=60:及格
成绩<60:差
需求2:
使用switch语句实现迷你运算器,从控制台输入两个操作数,显示出运算结果
补充阅读
暂无
三:补充说明
本章内容包括三个部分,其中选择控制语句和循环控制语句在程序开发中使用频率都非常高,跳转语句的使用频率相对而言会少一些,但重要程度也很高,所以在学习时不但要能掌握基本的语法结构,同时也要能通过流程图来理解各种不同语句的执行顺序,并且通过作业和练习题的训练达到熟练应用本章节技能点解决实际项目需求中的问题,另外这章内容就涉及到语句的跳转,所以需要大家掌握基本的eclipse调试功能,大家可以通过视频内容来了解和掌握基本的调试步骤,在后期学习中要不断练习使用myeclipse进行程序调试,找到问题出现的原因
四:JAVA语言中三种控制循环结构的代码形式
1.
while(condition){ statements; } 其中,condition是任何布尔表达式,其返回值为true或 false。只要值为true,循环就会继续执行。statements是条件的值为true时将要执行的语句。 |
2.
do{ statements; }while(condition); 其中,statements首次将无条件执行,随后只有当指定条件的值为真时才执行。condition是一个boolean表达式,其返回值为true或 false。首次循环执行后,只要返回值为true,该循环就继续执行。 |
3.
for(initialization;condition;update){ satatements; } 其中,initialization设置计数器变量的初始值,以及循环中需要的其他任何变量的值。这些语句以逗号隔开,并在开始循环时仅执行一次。 condition是一个boolean 表达式,其返回值为true 或 false。如果值为false,则循环终止。 satatements在条件的值为true 时执行。 update修改计数器变量,以及在该循环中使用的其他任何变量。这些语句总是在操作语句之后和检查后续条件之前执行。逗号可将多个自加语句分开。 |