多重循环及程序调试
学习方法
双重循环的原理结合课堂举例理解
双重循环输出图形的固定万法可以记忆通过代码巩固理解
跳转语句通过流程图分析思路程序
调试不仅是知识点,更是方法和技巧,使用起来
循环( while、for、do-while )
双重循环
跳转
多重循环初了解
为什么使用多重循环
如何使用循环输出如下图形
*****
*****
*****
*****
一个循环控制行数(外层循环)
一个循环控制列数(内层循环)
//输出一行星星
for(int i=1;i<=5;i++){
//输出一行里面的5列星星
for(int j=1;j<=5;j++){
System.out.print("*");
}
//换到下一行
System.out.println();
}
什么是多重循环
一个循环体内又包含另一个完整的循环结构
while(循环条件1){ 外层循环
//循环环作1
while(循环条件2){ 内层循环
//循环操作2
}
}
for(循环条件1){
//循环操作1
for(循环条件2){
//循环操作2
}
}
do{
//循环换作1
do{
//循环操作2
}while(循环操作2);
}while(循环条件1);
while(循环条件1){
//循环操作1
for(循环条件2){
//循环操作2
}
}
注意
各循环可互相嵌套
一般不超过三层
外层循环变量变化一次,内层循环变量要变化一遍
多重循环的使用
//使用双重循环实现“十年”::公转10圈,自转10个365天
//公转:每一年
for(int i=1;i<=10;i++){
System.out.println("------第"+i+"年------");
//自转:当年的365天
for(int j=1;j<=365;j++){
System.out.println("第"+j+"天");
}
}
总结
多重循环
一个循环体内又包含另一个完整的循环结构
多重循环请注意
各循环可互相嵌套
一般不超过三层
外层循环变量变化一次,内层循环变量要变化一遍
双重循环的使用
使用双重循环-1
使用双重循环输出如下图形
***** ***** *
***** ***** ***
***** ***** *****
***** ***** *******
***** ***** *********
//输出矩形
//输出一行星星
for(int i=1;i<=5;i++){
//输出一行里面的5列星星
for(int j=1;j<=5;j++){
System.out.print("*");
}
//换到下一行
System.out.println();
}
//输出平行四边形
//输出一行空格+星星
for(int i=1;i<=5;i++){
//输出每行里面的空格: 行i 空格5-i
for(int j=1;j<=5-i;j++){
System.out.print(" ");
}
//输出每行里面的5列星星
for(int j=1;j<=5;j++){
System.out.print("*");
}
//换到下一行
System.out.println();
}
//输出等腰三角形
//输出一行空格+星星
for(int i=1;i<=5;i++){
//输出每行里面的空格:行i 空格5-i
for(int j=1;j<=5-i;j++){
System.out.print(" ");
}
//输出每行里面的2*i-1列星星:行i 星星数2*i-1
for(int j=1;j<=2*i-1;j++){
System.out.print("*");
}
//换到下一行
System.out.println();
}
使用双重循环根据用户输入的数字,输出如下图形
您想要几行数字: 8
1
222
33333
4444444
555555555
66666666666
7777777777777
888888888888888
//输出数字三角形
Scanner input = new Scanner(System.in);
System.out.print("您想要几行数字?");
int num = input.nextInt();
//输出一行空格+数字
for(int i=1;i<=num;i++){
//输出每行里面的空格:行i 空格num-i
for(int j=1;j<=num-i;j++){
System.out.print(" ");
}
//输出每行里面的2*i-1列数字:行i 星星数2*i-1
//每行输出的内容和行数是一样的
for(int j=1;j<=2*i-1;j++){
System.out.print(i);
}
//换到下一行
System.out.println();
使用双重循环输出九九乘法表
//输出九九乘法表
//乘数(a)--外 被乘数(b)--内
for(int a=1;a<=9;a++){
for(int b=1;b<=a;b++){
System.out.print(a+"*"+b+"="+(a*b)+"\t");
}
System.out.println();
}
总结
双重循环的使用
外层循环变量变化一次,内层循环变量变化一遍
找规律很重要,固定写法可以记忆,代码理解
需先确定外层循环、内层循环
一定多敲两遍,举一反三
跳转语句break
break的作用1
int i = 2;
switch(i){
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
}
//其他语句
遇到break,立即跳出switch语向
break的作用2
改变程序控制流
用于do-whilewhile、for循环中,可跳出循环而执行循环后面的语句
while(...) {
......
......
break;
......
......
}
break通常在循环中与条件语句一起使用,
跳出当前循环
break应用1
描述4000米长跑比赛
for (int i = 0; i<10; i++) {
//跑4000米;
if(不能坚持){
break;//退出比赛
}
}
第8圈,快累死了...我要退出
break应用2
循环录入某学生5门课的成绩并计算平均分
如果某分数录入为负,停止录入并提示录入错误
//计算学员平均分,循环录入学员成绩,输入负数则退出
import java.util.Scanner;
Scanner input = new Scanner(System.in);
System.out.print("请输入您的姓名:");
String name = input.next();
//总成绩
int sum = 0;
//违规操作的标签 boolean
boolean flag = true;
for(int i=1;i<=5;i++){
System.out.print("请输入第"+i+"门课的成绩:");
int score = input.nextInt();
//输入为负,跳出循环
if(score<0){
flag = false;
break;
}
sum+=score;
}
//if(flag == true){
if(flag){
double avg = sum / 5;
System.out.println(name+"的五门成绩平均分为:"+avg);
}else{
System.out.println("抱歉,分数录入有误,请重新录入!");
}
总结
break使用及对流程的影响
改变程序控制流
结合案例理解其作用
跳转语句continue
什么是continue语句
continue:只能用在循环里
continue作用:跳过循环体中剩余的语而执行下一次循环
while(...) {
.....
.....
continue;
......
......
}
通常与条件语句一起使用,加速循环
继续下一次循环
continue的使用
循环录入Java课的学生成绩,统计分数大于等于80分的学生比例
//统计80分以上学生比例
import java.util.Scanner;
Scanner input = new Scanner(System.in);
System.out.print("请输入班级总人数:");
int total = input.nextInt();
//每个人的成绩
int score = 0;
//统计班里Java成绩大于80的人数
int num = 0;
//循环录入每个人的Java成绩
for(int i = 1; i<=total; i++){
System.out.print("请录入第"+i+"个同学的Java成绩:");
score = input.nextInt();
/*不使用continue
* if(score>=80){
num++;
}*/
//使用continue
if(score<80){
//跳过本次循环,不执行后面的num++;而是直接进入下次循环
continue;
}
num++;
}
//计算大于等于80的学员比例
System.out.println("80分以上的学生人数为:"+num);
double biLi = (double)num / total * 100;
System.out.println("80分以上的学生所占的比例为:"+biLi+"%");
1.通过循环,获得分数大于等于80分的学生人数num
2.判断,如果成绩<80不执行num++,直接进入下一次循环
总结
continue的作用及对流程的影响
跳出本次循环,进入下次循环
通过案例加深其作用的理解
break和continue的应用
break的应用
1~10之间的整数相加得到累加值大于20的当前数
//1~10之间的整数相加,得到累加值大于20的当前数
int sum = 0; //和
int i=1;
for(;i<=10;i++){
sum += i;
if(sum>20){
break;
}
}
System.out.println("1~10之间的整数相加,累加值大于20的当前数是:"+i);
continue的应用
求1~10之间的所有偶数和
1、使用循环进行累加,循环的范围是从1至10
2、判断当前数是否为偶数
3、如果为奇数跳过,执行下一个循环,如果为偶数,进行累加
//求1~10之间的所有偶数和
//不使用continue
int sum = 0; //偶数之和
for(int i=1;i<=10;i++){
//如果是偶数就加
if(i%2==0){
sum += i;
}
}
System.out.println("1-10之间的偶数和为:"+sum);*/
//使用continue
int sum = 0; //偶数之和
for(int i=1;i<=10;i++){
//如果是奇数,就不加
if(i%2!=0){
continue;
}
sum += i;
}
System.out.println("1-10之间的偶数和为:"+sum);
break和continue的应用
从键盘输入一位整数,当输入1~7时,输出”星期一~星期日“
输入其他数字时,提示用户重新输入
/*从键盘输入一位整数,当输入1~7时,输出“星期一”~“星期日”
输入其他数字时,提示用户重新输入
*/
import java.util.Scanner;
Scanner input = new Scanner(System.in);
//用户录入的数字
int num = 0;
do{
System.out.println("请输入1-7之间的数字,输入0则退出程序:");
num = input.nextInt();
//判断用户录入的数字是否在1-7的范围
if(num<0 || num>7){
System.out.println("您输入的数字不合格,只能输入1-7范围的数字!");
continue;
}
switch(num){
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
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;
}
}while(num!=0);
System.out.println("谢谢使用,程序结束!");
对比break和continue
使用场合
break常用于switch结构和循环结构中
continue一般用于循环结构中
作用(循环结构中)
break语句终止某个循环,程序跳转到循环块外的下一条语句
continue跳出本次循环,进入下一次循环
双重循环亦如此
return: 结束当前方法的执行并退出,返回到调用该方法的语句处
总结
break与continue的区别
break和continue的使用
一个需求可能有不同方式的解决方案,多尝试
两种跳转的区别通过程序运行结果总结对比
代码多敲、多思考
程序调试
为什么需要程序调试
编写程序过程中有时出现错误,但不好发现和定位错误,有没有好的方法呢?
通过代码阅读或者加输出语句查找程序错误
当程序结构越来越复杂时,需要专门的技术来发现和定位错误就是“程序调试“
当程序出错时,我们也希望能这样
逐条语句执行程序
观察程序执行情况
发现问题
解决问题
程序执行时忽闪一下就运行结束,怎么让程序一步一步运行 ?
程序调试
设置断点
断点:
程序暂停执行的代码行
单步运行
观察变量
总结
如何进行程序调试
设置断点
单步运行
观察变量
程序调试的运用
流程控制语句调试起来
循环
跳转
双重循环
总结
双重循环中,外层循环变量与内层循环变量的关系是什么 ?
在循环中,break的作用是什么?
在循环中,continue的作用是什么?
如何进行程序调试?