循环嵌套:一个循环作为另外一个循环的循环体或者是循环体的一部分。
for、while、do..while可以相互嵌套。
????????需求:打印如下内容:
????????1 2 3 4 5
????????1 2 3 4 5
????????1 2 3 4 5
????????代码:
public static void main(String[] args) {
//需求:打印如下内容:
// 1 2 3 4 5
// 1 2 3 4 5
// 1 2 3 4 5
//方法一:
System.out.println("1 2 3 4 5 ");
System.out.println("1 2 3 4 5 ");
System.out.println("1 2 3 4 5 ");
System.out.println("-----华丽的分割线-----");
//方法二:
for(int j = 1; j <= 5; j++) {
System.out.print(j + " ");
}
System.out.println();
for(int j = 1; j <= 5; j++) {
System.out.print(j + " ");
}
System.out.println();
for(int j = 1; j <= 5; j++) {
System.out.print(j + " ");
}
System.out.println();
System.out.println("-----华丽的分割线-----");
//方法三:
for(int i = 0; i < 3; i++) {
System.out.println("1 2 3 4 5 ");
}
System.out.println("-----华丽的分割线-----");
//方法四:
for(int i = 0; i < 3; i++) {
for(int j = 1; j <= 5; j++) {
System.out.print(j + " ");
}
System.out.println();
}
}
上述案例方法四中:一个循环就作为了另外一个循环体的内容,这就是循环嵌套。外层循环执行1次,内存循环要执行1遍。?
????????需求:打印如下内容:
????????????????1
????????????????1 2
????????????????1 2 3
????????????????1 2 3 4
????????????????1 2 3 4 5
????????????????代码:
public static void main(String[] args) {
//需求:打印如下内容:
// 1
// 1 2
// 1 2 3
// 1 2 3 4
// 1 2 3 4 5
/*
* 分析:
* 1.一共5行
* 2.每行打印的数据是 从1开始到n结束。(n的值,第一行是1,第二行是2,第三行是3,第四行是4,第五行是5)
* 3.因此,可以通过循环(外层循环)控制行的变化。循环5次。从第1行到第5行
* 4.每一行的数据,可以通过一个循环(内层循环)打印 从1到n的数据。(n的值,第一行是1,第二行是2,第三行是3,第四行是4,第五行是5)
*
* */
//不使用循环嵌套
//第1行
for(int j = 1; j <= 1; j++) {
System.out.print(j + " ");
}
System.out.println();
//第2行
for(int j = 1; j <= 2; j++) {
System.out.print(j + " ");
}
System.out.println();
//第3行
for(int j = 1; j <= 3; j++) {
System.out.print(j + " ");
}
System.out.println();
//第4行
for(int j = 1; j <= 4; j++) {
System.out.print(j + " ");
}
System.out.println();
//第5行
for(int j = 1; j <= 5; j++) {
System.out.print(j + " ");
}
System.out.println();
System.out.println("-----华丽的分割线-----");
//使用循环嵌套
for(int i = 1; i <= 5; i++) {
for(int j = 1; j <= i; j++) {
System.out.print(j + " ");
}
System.out.println();
}
}
需求:打印如下内容:
1 2 3 4
1 2 3
1 2
1
代码:
public static void main(String[] args) {
//需求:打印如下内容:
// 1 2 3 4
// 1 2 3
// 1 2
// 1
//不使用循环嵌套
//第1行
for(int j = 1; j <= 4; j++) {
System.out.print(j + " ");
}
System.out.println();
//第2行
for(int j = 1; j <= 3; j++) {
System.out.print(j + " ");
}
System.out.println();
//第3行
for(int j = 1; j <= 2; j++) {
System.out.print(j + " ");
}
System.out.println();
//第4行
for(int j = 1; j <= 1; j++) {
System.out.print(j + " ");
}
System.out.println();
System.out.println("-----华丽的分割线-----");
//循环嵌套
for(int i = 4; i >= 1; i--) {
for(int j = 1; j <= i; j++) {
System.out.print(j + " ");
}
System.out.println();
}
}
需求:打印九九乘法表。
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
...
代码:
public static void main(String[] args) {
// 需求:打印九九乘法表。
// 1x1=1
// 1x2=2 2x2=4
// 1x3=3 2x3=6 3x3=9
// ...
// 不使用嵌套
// 第1行
for (int j = 1; j <= 1; j++) {
System.out.print(j + "x" + 1 + "=" + j * 1 + " ");
}
System.out.println();
// 第2行
for (int j = 1; j <= 2; j++) {
System.out.print(j + "x" + 2 + "=" + j * 2 + " ");
}
System.out.println();
// 第3行
for (int j = 1; j <= 3; j++) {
System.out.print(j + "x" + 3 + "=" + j * 3 + " ");
}
System.out.println();
// 第4行
for (int j = 1; j <= 4; j++) {
System.out.print(j + "x" + 4 + "=" + j * 4 + " ");
}
System.out.println();
// 第5行
for (int j = 1; j <= 5; j++) {
System.out.print(j + "x" + 5 + "=" + j * 5 + " ");
}
System.out.println();
// 第6行
for (int j = 1; j <= 6; j++) {
System.out.print(j + "x" + 6 + "=" + j * 6 + " ");
}
System.out.println();
// 第7行
for (int j = 1; j <= 7; j++) {
System.out.print(j + "x" + 7 + "=" + j * 7 + " ");
}
System.out.println();
// 第8行
for (int j = 1; j <= 8; j++) {
System.out.print(j + "x" + 8 + "=" + j * 8 + " ");
}
System.out.println();
// 第9行
for (int j = 1; j <= 9; j++) {
System.out.print(j + "x" + 9 + "=" + j * 9 + " ");
}
System.out.println();
System.out.println("-----华丽的分割线-----");
for(int i = 1; i <= 9; i++) {
for(int j = 1; j <= i; j++) {
System.out.print(j + "x" + i + "=" + j * i + " ");
}
System.out.println();
}
}
需求:输出如下图形。
@@@@@
? ? @@@@@
? ? ? ? @@@@@
? ? ? ? ? ? @@@@@
代码:
public static void main(String[] args) {
// 需求:打印如下图形。
// @@@@@
// @@@@@
// @@@@@
// @@@@@
//分析:
//一共4行,因此外层循环要循环四次
//对于每一行:包含3部分(空格、@以及换行符):即外层循环的循环体包含3部分。
//第1行 空格是0个,@是5个,换行符是1个
//第2行 空格是1个,@是5个,换行符是1个
//第3行 空格是2个,@是5个,换行符是1个
//第4行 空格是3个,@是5个,换行符是1个
for(int i = 0; i < 4; i++) {
for(int j = 0; j < i; j++) {
System.out.print(" ");
}
for(int k = 0; k < 5; k++) {
System.out.print("@");
}
System.out.println();
}
}
需求:打印如下图像
? ? ? ? ? ? @
? ? ? ? @@@
? ? @@@@@
@@@@@@@
代码:
public static void main(String[] args) {
// 需求:打印如下图形。
// @
// @@@
// @@@@@
//@@@@@@@
//分析:
//1.一共四行。外层循环要循环4次
//2.每一行包含3个部分:空格、@、换行符
//3.第1行 3个空格 1个@ 1个换行符
// 第2行 2个空格 3个@ 1个换行符
// 第3行 1个空格 5个@ 1个换行符
// 第4行 0个空格 7个@ 1个换行符
//空格个数和行号的关系是 空格个数 = 4 - 行号
//@个数和行号的关系是 @个数 = 2 * 行号 - 1
//换行符是每行1个。
for(int i = 1; i <= 4; i++) {
for(int j = 0; j < 4 - i; j++) {
System.out.print(" ");
}
for(int k = 0; k < 2 * i - 1; k++) {
System.out.print("@");
}
System.out.println();
}
}
需求:打印如下图形。
? ? ? ? ? @
? ? ? @@@
? ?@@@@@
@@@@@@@
? ? @@@@@
? ? ? ?@@@
? ? ? ? ? @
代码:
public static void main(String[] args) {
// 需求:打印如下图形。
// @
// @@@
// @@@@@
//@@@@@@@
// @@@@@
// @@@
// @
//分析:
//这个菱形可以看做是一个上三角形和一个下三角形拼成的图形。
//一、首先是上三角形。先用一个循环嵌套打印出来上三角
//1.一共4行。外层循环要循环4次
//2.每一行包含3个部分:空格、@、换行符
//3.第1行 3个空格 1个@ 1个换行符
// 第2行 2个空格 3个@ 1个换行符
// 第3行 1个空格 5个@ 1个换行符
// 第4行 0个空格 7个@ 1个换行符
//空格个数和行号的关系是 空格个数 = 4 - 行号
//@个数和行号的关系是 @个数 = 2 * 行号 - 1
//换行符是每行1个。
//二、其次是下三角形。也用一个循环嵌套打印出来下三角
//1.一共是3行。外层循环要循环3次
//2.每行包含3部分:空格、@、换行符
//3.第1行 1个空格 5个@ 1个换行符
// 第2行 2个空格 3个@ 1个换行符
// 第3行 3个空格 1个@ 1个换行符
//空格个数和行号的关系是 空格个数与行号相等
//@个数和行号的关系是 @个数 = (3 - 行号) * 2 + 1
//换行符是每行1个
for(int i = 1; i <= 4; i++) {
for(int j = 0; j < 4 - i; j++) {
System.out.print(" ");
}
for(int k = 0; k < 2 * i - 1; k++) {
System.out.print("@");
}
System.out.println();
}
for(int i = 1; i <= 3; i++) {
for(int j = 1; j <= i; j++) {
System.out.print(" ");
}
for(int k = 1; k <= (3 - i) * 2 + 1; k++) {
System.out.print("@");
}
System.out.println();
}
}
需求:求1! + 2! + 3! + 4!的和是多少。
代码:
public static void main(String[] args) {
//需求:求1! + 2! + 3! + 4!的和是多少。
//分析:
//1.内层循环 计算每个数的阶乘
//2.外层求 阶层的和。
long sum = 0;
for(int i = 1; i <= 4; i++) {
long num = 1;
for(int j = 1; j <= i; j++) {
num *= j;
}
sum += num;
}
System.out.println(sum);
}
需求:打印100以内所有的质数。质数:大于1的自然数中,只能被1和自身整除的数。
代码:
public static void main(String[] args) {
//需求:打印100以内所有的质数。质数:大于1的自然数中,只能被1和自身整除的数。
//外层循环:从2开始循环到100
//内层循环:判断数字是不是质数. 让这个数n从2开始除,一直除到n-1,一旦余数为0,表示不是质数。否则是质数。
for(int i = 2; i < 100; i++) {
boolean isPrime = true;
for(int j = 2; j < i; j++) {
if(i % j == 0) {
isPrime = false;
break;
}
}
if(isPrime) {
System.out.println(i);
}
}
}
需求:我国古代数学家张邱建在《算经》中出了一道“百钱买百鸡”的问题,题意是这样的:5文钱可以买一只公鸡,3文钱可以买一只母鸡,1文钱可以买3只小鸡。现在用100文钱买100只鸡,那么各有公鸡、母鸡、小鸡多少只?请编写程序实现。
代码:
public static void main(String[] args) {
//我国古代数学家张邱建在《算经》中出了一道“百钱买百鸡”的问题,题意是这样的:
//5文钱可以买一只公鸡,3文钱可以买一只母鸡,1文钱可以买3只小鸡。
//现在用100文钱买100只鸡,那么各有公鸡、母鸡、小鸡多少只?请编写程序实现。
//分析:
//1. 5文钱买1只公鸡。100文钱最多买20只公鸡。也就是说公鸡的取值范围是:[0,20]
//2. 3文钱买1只母鸡。100文钱最多买33只母鸡。也就是说母鸡的取值范围是:[0,33]
//3. 1文钱买3只小鸡。100文钱最多买300只小鸡(因为是最多100只鸡,所以最多是100只)。也就是说小鸡的取值范围是:[0,100] 注:小鸡需要3只3只买
//假设买了 x只公鸡,y只母鸡,z只小鸡。 5*x + 3*y + z/3 = 100 并且 x + y + z = 100,求x、y、z的组合有哪些
for(int x = 0; x <= 20; x++) {
for(int y = 0; y <= 33; y++) {
for(int z = 0; z <= 100; z += 3) {
if(5 * x + 3 * y + z / 3 == 100 && x + y + z == 100) {
System.out.println("公鸡" + x + "只,母鸡" + y + "只,小鸡" + z + "只");
}
}
}
}
}
循环嵌套可以看成是普通的循环,只不过循环体是另外一个循环。
for循环、while循环、do..while循环可以相互嵌套。
如果循环嵌套里,内层循环有break,break只能结束内层循环,无法结束外层循环,即:break在哪个循环里,结束哪个循环。
循环是程序开发中比较常用的语法,循环结构可以让某些代码重复执行。
Java提供了for循环、while循环和do..while循环。
明确知道循环次数使用for循环。
不知道循环次数使用while循环。
至少执行一次循环体的时候使用do..while循环。
开发中要避免死循环,可通过break结束死循环。
break用在循环中,作用是结束循环,只能结束本层循环(循环嵌套时),break通常与if语句连用。
continue用于结束本次循环,进入下一次循环。
循环嵌套时:可以把内层循环看成外层循环的循环体。理论上讲,循环嵌套的层数是无限的。for循环、while循环、do..while循环可以相互嵌套。最常见的是for循环嵌套for循环。