一、多重循环
一个循环体内有包含另一个完整的循环结构
执行规律:
(1)外层循环控制行,内层循环控制列
(2)外层循环执行一次,内层循环执行了一遍
结构:
while(循环条件1){
//循环操作1
while(循环条件2){
//循环操作2
}
}-----------------------
do{
//循环操作1
do{
//循环操作2
}while(循环条件2);
}while(循环条件1);-----------------------
for(循环条件1){
//循环操作1
for(循环条件2){
//循环操作2
}
}------------------------
while(循环条件1){
//循环操作1
for(循环条件2){
//循环操作2
}
}
注意
各循环可互相嵌套
一般不超过三层
外层循环变量变化一次,内层循环变量要变化一遍
public static void main(String[] args) {
// 使用双重for循环输出九九乘法表
// 外层循环变量控制行数 九九乘法表一共有9行
for (int i = 1; i <= 9; i++) {
// 内层循环变量控制每一行的列数 九九乘法表每一行的列数与行号相同,也就是j的范围对应从1到i
for (int j = 1; j <= i; j++) {
// 每一个乘法式子中一个因数为i,另一个因数为j
System.out.print(j + "*" + i + "=" + (i * j) + "\t");
}
// 换行
System.out.println("");
}
}
其中,外层循环是控制行数的,内层循环控制列数
二、break语句
作用场景:switch选择结构和循环结构中
作用:
(1).在switch选择结构中遇到break,则结束整个switch选择结构,执行switch选择结构后面的代码
(2).在循环结构中遇到break,则结束整个循环结构后续所有操作,执行循环结构后面的代码
语法结构:
while(……){
…………
…………
break;
…………
…………
}
注意:break一般结合if选择语句一起使用
for(int i=1;i<=20;i++){
System.out.println(i);
//判断i的值,看其有没有到10,如果到10了,就应该结束整个for循环
if(i==10){
break;//结束整个for循环
}
}
三、continue语句
作用场景:只能作用在循环结构中
作用:结束当前(本次)循环后续操作,继续执行下一次循环操作
语法结构:
while(……){
…………
…………
continue;
…………
…………
}
注意:continue一般结合if语句一起使用
用continue输出班级中80分以上的人数
Scanner sc = new Scanner(System.in);
System.out.println("请输入班级人数");
int people = sc.nextInt();
int num=0;
for(int i=1;i<=people;i++){
System.out.println("请输入第"+i+"位同学的成绩");
double score = sc.nextDouble();
if(score<80){
continue;
}
num++;
}
System.out.println("共有"+num+"人80分以上");
break与continue的对比:
使用场合:break常用于switch结构和循环结构中;continue一般用于循环结构中
作用:break语句终止某个循环,程序跳转到循环块外的下一条语句;continue跳出本次循环,进入下一次循环
break和continue在双重循环中的使用:
break在双重循环中的使用,内层循环中的break结束的是内层循环,如果要结束外层训话你,需要使用标记来表明结束哪个循环
break:
a: for (int i = 1; i <= 5; i++) {
System.out.print(i + "--");
b: for (int j = 10; j <= 50; j += 10) {
System.out.print(j + " ");
if (j == 30) {
break;//结束内层循环
}
}
System.out.println();
}
break默认是找离自己最近的循环来执行的,所以这里的break是作用在内循环中的,也就是内循环输出到30的时候就会结束,然后执行循环外面的代码
如果要让break控制外循环的话可以在循环前面“做一个标记”,就是像下面的图一样的,并且“告诉”break是结束那个循环
a: for (int i = 1; i <= 5; i++) {
System.out.print(i + "--");
b: for (int j = 10; j <= 50; j += 10) {
System.out.print(j + " ");
if (j == 30) {
break a;//结束内层循环
}
}
System.out.println();
}
执行结果:当j第一次变成30的时候就结束了。
continue:
代码如下:
a:for(int i=1;i<=5;i++){
System.out.print(i+"-----");
b:for(int j=10;j<=50;j+=10){
if(j==30){
continue;
}
System.out.print(j+" ");
}
System.out.println();
}
这里没有指定所以默认是对内循环使用的,也就是在j=30的时候是不输出的;输出结果如下:
同样continue也是可以指定对哪个循环使用的。
a:for(int i=1;i<=5;i++){
System.out.print(i+"-----");
b:for(int j=10;j<=50;j+=10){
if(j==30){
continue a;
}
System.out.print(j+" ");
}
System.out.println();
}
对外层循环使用,即j=30是结束本次循环,i直接开始迭代并进入下次迭代
四、程序调试
通过代码阅读或者加输出语句查找程序错误
当程序结构越来越复杂时,需要专门的技术来发现和定位错误,就是"程序调试":
设置断点---->单步运行----->观察变量
打断点:
双击左边栏:
取消断点也是这样的
断点的运行
点击这里单步运行:
点击这里
在调试的时候这里会有数据
输出也是单步输出的
结束的时候点击这里退出调试的模式