java 嵌套循环
嵌套循环
看题有几层几部分,逐级操作,分开进行 ,先考虑外层,再考虑内层;
先看率这部分,再考虑下部分;
同内层,先做第一个循环,再做第二个循环,找到(凑出)形成 循环条件判断的公式。
为了更好的理解循环嵌套之后的一个操作,后期代码中,一些算法中,都会使用到嵌套循环。
/* L *
***** 1 5
***** 2 5
***** 3 5
***** 4 5
***** 5 5
*/
class Demo1 {
public static void main(String[] args) {
System.out.println("********");
System.out.println("********");
System.out.println("********");
System.out.println("********");
System.out.println("********");
System.out.println("********");
System.out.println("********");
System.out.println("********");
System.out.println("----------------------------------------");
```java
// 需要展示5行数据
for (int i = 1; i <= 8; i++) {
System.out.println("********");
}
System.out.println("----------------------------------------");
// 外层循环控制总行数
int line = 20;
for (int i = 1; i <= line; i++) {
// 星星个数 = 最大行号
for (int j = 1; j <= line; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
```java
```java
```java
/* L *
* 1 1
** 2 2
*** 3 3
**** 4 4
***** 5 5
****** 6 6
*/
class Demo2 {
public static void main(String[] args) {
int line = 30;
// 外层循环控制总计6行
for (int i = 1; i <= line; i++) {
// 每一行星星个数 == 行号
for (int j = 1; j <= i; j++) {
System.out.print('*');
}
System.out.println();
}
}
}
```java
```java
```java
/* L _ *
* 1 4 1
** 2 3 2
*** 3 2 3
**** 4 1 4
***** 5 0 5
_下划线表示空格
_ = 总行数 - 当前行号;
* = 当前行号
*/
```java
```java
```java
class Demo3 {
public static void main(String[] args) {
int line = 30;
// 外层循环控制总行数
for (int i = 1; i <= line; i++) {
// 内层循环1: 控制空格的个数
for (int j = 1; j <= line - i; j++) {
System.out.print(' ');
}
// 内层循环2: 控制星星的个数
for (int k = 1; k <= i; k++) {
System.out.print('*');
}
System.out.println();
}
}
}
```java
/* L _ *
* 1 5 1
*** 2 4 3
***** 3 3 5
******* 4 2 7
********* 5 1 9
*********** 6 0 11
_ = 总行数 - 当前行号;
* = 2 * 当前行号 - 1;
*/
class Demo4 {
public static void main(String[] args) {
int line = 20;
// 外层循环控制总行数,这里是6行
for (int i = 1; i <= line; i++) {
// 内层循环1:控制空格的个数
for (int j = 1; j <= line - i; j++) {
System.out.print(' ');
}
// 内层循环2:控制星星的个数 星星 = 2 * 当前行号 - 1;
for (int k = 1; k <= 2 * i - 1; k++) {
System.out.print('*');
}
System.out.println();
}
}
}
/* L _ 字符 个数
A 1 6 A 1
BBB 2 5 B 3
CCCCC 3 4 C 5
DDDDDDD 4 3 D 7
EEEEEEEEE 5 2 E 9
FFFFFFFFFFF 6 1 F 11
GGGGGGGGGGGGG 7 0 G 13
_个数 = 总行数 - 当前行号;
字符个数 = 2 * 当前行号 - 1;
字符本身的递增过程
*/
class Demo5 {
public static void main(String[] args) {
// 定义一个字符变量,变量初始化为字符'A'
char ch = 'A';
// 外层循环控制总行数,总行数7行
for (int i = 1; i <= 26; i++) {
// 内存循环1: 控制空格的个数
for (int j = 1; j <= 26 - i; j++) {
System.out.print(' ');
}
// 内存循环2: 控制字符个数
for (int k = 1; k <= 2 * i - 1; k++) {
System.out.print(ch);
}
System.out.println();
// 字符变量需要在每一次展会完毕之后,进行自增
ch += 1;
}
}
}
/* L _ *
* 1 5 1
*** 2 4 3
***** 3 3 5
******* 4 2 7
********* 5 1 9
*********** 6 0 11
********* 1 1 9
******* 2 2 7
***** 3 3 5
*** 4 4 3
* 5 5 1
下半部分 第一行星星个数为9,如何计算得来
凑!!!
总行数5
5 * 2 - (i * 2 - 1) --> 5 * 2 - i * 2 + 1 => (5 - i) * 2 + 1
(5 - i) * 2 + 1
10 - 1 = 9;
10 - 3 = 7;
10 - 5 = 5;
*/
class Demo6 {
public static void main(String[] args) {
// 菱形总行数 ,一旦是单数
int line = 25;
// 图形一分为二,上半部分为line / 2 + 1行
// 外层循环控制总行数,这里是line / 2 + 1行
for (int i = 1; i <= line / 2 + 1; i++) {
// 内层循环1:控制空格的个数
for (int j = 1; j <= line / 2 + 1 - i; j++) {
System.out.print(' ');
}
// 内层循环2:控制星星的个数 星星 = 2 * 当前行号 - 1;
for (int k = 1; k <= 2 * i - 1; k++) {
System.out.print('*');
}
System.out.println();
}
// 下半部分一共line / 2行
// 外层循环控制总行数,总计line / 2行
for (int i = 1; i <= line / 2; i++) {
// 内层循环1: 展示空格个数
for (int j = 1; j <= i; j++) {
System.out.print(' ');
}
// 内层循环2: 控制星星的个数
for (int k = 1; k <= (line / 2 - i) * 2 + 1; k++) {
System.out.print('*');
}
System.out.println();
}
}
}