“Java的循环嵌套”的版本间的差异
来自CloudWiki
(→嵌套循环) |
|||
(未显示同一用户的2个中间版本) | |||
第1行: | 第1行: | ||
+ | ==问题引出== | ||
+ | *如何打印一行*号呢? | ||
+ | |||
+ | 方法1: | ||
+ | |||
+ | System.out.println("**********"); | ||
+ | |||
+ | 方法2: | ||
+ | |||
+ | <nowiki>public class ForFor { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | // TODO Auto-generated method stub | ||
+ | for(int j=0;j<10;j++) { | ||
+ | System.out.print("*"); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | }</nowiki> | ||
+ | |||
+ | *如何用for循环打印多行*号呢 ? | ||
+ | |||
+ | <nowiki>package task4; | ||
+ | |||
+ | public class ForFor { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | // TODO Auto-generated method stub | ||
+ | for(int i=0;i<10;i++) { | ||
+ | System.out.println("**********"); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </nowiki> | ||
+ | |||
+ | *我们发现其实第2段程序里面的println语句也完全可以用第1段程序的循环来代替。 | ||
+ | |||
+ | 于是,程序可以改写为: | ||
+ | |||
+ | <nowiki>package task4; | ||
+ | |||
+ | public class ForFor { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | // TODO Auto-generated method stub | ||
+ | for(int i=0;i<10;i++) { | ||
+ | //打印每一行的星标,回车结束 | ||
+ | for(int j=0;j<10;j++) { | ||
+ | System.out.print("*");//打印每一列的星标 | ||
+ | } | ||
+ | System.out.println(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </nowiki> | ||
+ | |||
+ | ==嵌套循环== | ||
*如果把一个循环放在另一个循环体内,那么就可以形成嵌套循环,嵌套循环既可以是for循环嵌套while循环,也可以是while循环嵌套do while循环……即各种类型的循环都可以作为外层循环,也可以作为内层循环。 | *如果把一个循环放在另一个循环体内,那么就可以形成嵌套循环,嵌套循环既可以是for循环嵌套while循环,也可以是while循环嵌套do while循环……即各种类型的循环都可以作为外层循环,也可以作为内层循环。 | ||
+ | |||
*当程序遇到嵌套循环时,如果外层循环的循环条件允许,则开始执行外层循环的循环体,而内层循环将被外层循环的循环体来执行——只不过内层循环需要反复执行自己的循环体而已。当内层循环执行结束,且外层循环的循环体执行时,则再次计算外层循环的循环条件,决定是否再次开始执行外层循环的循环体。 | *当程序遇到嵌套循环时,如果外层循环的循环条件允许,则开始执行外层循环的循环体,而内层循环将被外层循环的循环体来执行——只不过内层循环需要反复执行自己的循环体而已。当内层循环执行结束,且外层循环的循环体执行时,则再次计算外层循环的循环条件,决定是否再次开始执行外层循环的循环体。 | ||
+ | |||
*嵌套循环的执行流程如图2-19所示。 | *嵌套循环的执行流程如图2-19所示。 | ||
− | *[[文件:java2-21.png]] | + | |
− | *如图2- | + | *[[文件:java2-21.png|600px]] |
+ | |||
+ | *如图2-19所示,'''嵌套循环就是把内层循环当成外层循环的循环体'''。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可以结束外层循环的当次循环,开始下一次循环。 | ||
+ | |||
+ | ===实例:打印矩形=== | ||
+ | |||
+ | <nowiki> | ||
+ | package task4; | ||
+ | |||
+ | public class ForFor { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | // TODO Auto-generated method stub | ||
+ | for(int i=0;i<10;i++) { | ||
+ | //打印每一行的星标,回车结束 | ||
+ | for(int j=0;j<10;j++) { | ||
+ | System.out.print("*");//打印每一列的星标 | ||
+ | } | ||
+ | System.out.println(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </nowiki> | ||
+ | |||
+ | ===打印平行四边形=== | ||
+ | |||
+ | <nowiki>package task4; | ||
+ | |||
+ | public class ForFor { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | // TODO Auto-generated method stub | ||
+ | for (int i = 1; i <=5; i++) { | ||
+ | //填充空格 | ||
+ | for (int j = 1; j <= 5 - i; j++) { | ||
+ | System.out.print(" "); | ||
+ | } | ||
+ | //内层循环 每次打印一个* | ||
+ | for (int k = 1; k <= 5; k++) { | ||
+ | System.out.print("*"); | ||
+ | } | ||
+ | System.out.println(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </nowiki> | ||
+ | |||
+ | ===实例:打印九九乘法表=== | ||
+ | |||
*例如:通过嵌套循环输出九九乘法表。 | *例如:通过嵌套循环输出九九乘法表。 | ||
+ | |||
+ | *[[文件:java2-22.png]] | ||
+ | |||
+ | 分析: | ||
+ | |||
+ | 打印第一行: | ||
+ | |||
+ | <nowiki> | ||
+ | int k=1; | ||
+ | System.out.print(1 + " * " + k + " = " + (1 * k)); | ||
+ | System.out.println(); | ||
+ | |||
+ | </nowiki> | ||
+ | |||
+ | 打印第2行: | ||
+ | |||
+ | <nowiki> | ||
+ | for(int j = 1; j <= 2; j++) { | ||
+ | System.out.print(2 + " * " + j + " = " + (2 * j)); | ||
+ | System.out.print("\t"); | ||
+ | } | ||
+ | System.out.println(); | ||
+ | |||
+ | </nowiki> | ||
+ | |||
+ | 打印第3行: | ||
+ | |||
+ | <nowiki> | ||
+ | |||
+ | for(int j = 1; j <= 3; j++) { | ||
+ | System.out.print(3 + " * " + j + " = " + (3 * j)); | ||
+ | System.out.print("\t"); | ||
+ | } | ||
+ | System.out.println();</nowiki> | ||
+ | |||
+ | 完整代码: | ||
+ | |||
<nowiki>public class NestedLoopTest { | <nowiki>public class NestedLoopTest { | ||
public static void main(String[] args) { | public static void main(String[] args) { | ||
第23行: | 第172行: | ||
*实际上,嵌套循环不仅可以是两层嵌套,而且可以是三层嵌套、四层嵌套……不论循环如何嵌套,总可以把内层循环当成外层循环的循环体来对待,区别只是这个循环体里包含了需要反复执行的代码。 | *实际上,嵌套循环不仅可以是两层嵌套,而且可以是三层嵌套、四层嵌套……不论循环如何嵌套,总可以把内层循环当成外层循环的循环体来对待,区别只是这个循环体里包含了需要反复执行的代码。 | ||
− | * | + | |
+ | ===实例:面馆套餐组合=== | ||
+ | *面馆程序:一共有多少种套餐组合 ? | ||
<nowiki>public class test03 { | <nowiki>public class test03 { |
2020年3月26日 (四) 15:12的最新版本
问题引出
- 如何打印一行*号呢?
方法1:
System.out.println("**********");
方法2:
public class ForFor { public static void main(String[] args) { // TODO Auto-generated method stub for(int j=0;j<10;j++) { System.out.print("*"); } } }
- 如何用for循环打印多行*号呢 ?
package task4; public class ForFor { public static void main(String[] args) { // TODO Auto-generated method stub for(int i=0;i<10;i++) { System.out.println("**********"); } } }
- 我们发现其实第2段程序里面的println语句也完全可以用第1段程序的循环来代替。
于是,程序可以改写为:
package task4; public class ForFor { public static void main(String[] args) { // TODO Auto-generated method stub for(int i=0;i<10;i++) { //打印每一行的星标,回车结束 for(int j=0;j<10;j++) { System.out.print("*");//打印每一列的星标 } System.out.println(); } } }
嵌套循环
- 如果把一个循环放在另一个循环体内,那么就可以形成嵌套循环,嵌套循环既可以是for循环嵌套while循环,也可以是while循环嵌套do while循环……即各种类型的循环都可以作为外层循环,也可以作为内层循环。
- 当程序遇到嵌套循环时,如果外层循环的循环条件允许,则开始执行外层循环的循环体,而内层循环将被外层循环的循环体来执行——只不过内层循环需要反复执行自己的循环体而已。当内层循环执行结束,且外层循环的循环体执行时,则再次计算外层循环的循环条件,决定是否再次开始执行外层循环的循环体。
- 嵌套循环的执行流程如图2-19所示。
- 如图2-19所示,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可以结束外层循环的当次循环,开始下一次循环。
实例:打印矩形
package task4; public class ForFor { public static void main(String[] args) { // TODO Auto-generated method stub for(int i=0;i<10;i++) { //打印每一行的星标,回车结束 for(int j=0;j<10;j++) { System.out.print("*");//打印每一列的星标 } System.out.println(); } } }
打印平行四边形
package task4; public class ForFor { public static void main(String[] args) { // TODO Auto-generated method stub for (int i = 1; i <=5; i++) { //填充空格 for (int j = 1; j <= 5 - i; j++) { System.out.print(" "); } //内层循环 每次打印一个* for (int k = 1; k <= 5; k++) { System.out.print("*"); } System.out.println(); } } }
实例:打印九九乘法表
- 例如:通过嵌套循环输出九九乘法表。
分析:
打印第一行:
int k=1; System.out.print(1 + " * " + k + " = " + (1 * k)); System.out.println();
打印第2行:
for(int j = 1; j <= 2; j++) { System.out.print(2 + " * " + j + " = " + (2 * j)); System.out.print("\t"); } System.out.println();
打印第3行:
for(int j = 1; j <= 3; j++) { System.out.print(3 + " * " + j + " = " + (3 * j)); System.out.print("\t"); } System.out.println();
完整代码:
public class NestedLoopTest { public static void main(String[] args) { // 外层循环 for(int i = 1; i <= 9; i++) { //内层循环 for(int j = 1; j <= i; j++) { System.out.print(i + " * " + j + " = " + (i * j)); System.out.print("\t"); } System.out.println(); } } }
- 运行上面程序,看到如下运行结果:
- 从上面运行结果可以看出,进入嵌套循环时,循环变量i开始为1,这时即进入了外层循环。进入外层循环后,内存循环把i当成一个普通变量,其值为1。在外层循环的当次循环里,内层循环就是一个普通循环。
- 实际上,嵌套循环不仅可以是两层嵌套,而且可以是三层嵌套、四层嵌套……不论循环如何嵌套,总可以把内层循环当成外层循环的循环体来对待,区别只是这个循环体里包含了需要反复执行的代码。
实例:面馆套餐组合
- 面馆程序:一共有多少种套餐组合 ?
public class test03 { public static void main(String[] args) { // TODO Auto-generated method stub String [] menu = {"阳春面","油泼面","鸡汤面","火鸡面","安徽板面"}; String [] drink = {"可乐","啤酒","雪碧"}; for(int i=0;i<5;i++){ for(int j=0;j<3;j++){ System.out.println(menu[i]+"+"+drink[j]); } } } }
返回 Java程序设计