我们先了解一下 For 循环:
For循环:
它是围绕一组有限的重复代码构建的。
所以如果你有一个特定的代码块,你想要
一遍又一遍地跑了特定的次数
For 循环很有帮助。
语法:
for(initilization; conditional expression; increment expression)
{
//repetition code here
}
例如:
int x = 7;
for (int i = 1; i <= x; i++){
// statements
}
在这个“int i=1”是一个初始化部分,循环会迭代
直到条件为真,即 (I
在循环体内的这条语句将被执行后,最后“i++”即“I”的值将递增(I将变为2)。
这个过程每次都会重复,直到条件 (I
现在让我们了解模式是如何形成的:
ROW (1) * --> COLUMN
| (2) **
| (3) ***
| (4) *****
v (5) *******
正如我们所见,首先需要考虑两件事:行数,其次是列数:
我们使用两个循环来构造这样的结构,第一个外部循环用于行数,第二个内部循环用于列数。
代码逻辑:首先将金字塔分成3个三角形。
####$
###$$@
##$$$@@
#$$$$@@@
$$$$$@@@@
1>第一个三角形(用#表示的空格)
####
###
##
#
2>第二个三角形(用$表示)
$
$$
$$$
$$$$
$$$$$
3> 第三个三角形(用@表示)
#
@
@@
@@@
@@@@
它们将共同构成一个金字塔结构
开始:
现在让我们分解我们的模式问题:
######1
#####212
####32123
###4321234
##543212345
#65432123456
7654321234567
我们将它分成 3 个三角形,每个三角形在主循环中都有自己的循环,用于计算行数。
正如我们所见,我们的模式所需的行数为 7,因此我们将重复第一个循环,直到达到 7 行。
主循环(用于行):
int x = 7;
for (int i = 1; i <= x; i++) { // main loop for number of rows
// other 3 loops will come insidethe mail loop
}
第一个内循环:
正如我们在模式逻辑中看到的,第一个三角形将
由空格或空白组成。
output eg: (representing white spaces with #)
######
#####
####
###
##
#
for (int j = 1; j <= x - i; j++) // j represent a column number
System.out.print(" ");
// This will create blank spaces till the condition is true.
**condition explained:** j <= x - i
“i”的值为“1”,因为这是主循环第一次运行
从那以后“i”的值就没有改变。
**replace values:**
当 j = 1 : 1
//主循环和内循环的第一次迭代。
在此控制之后将进入下一个循环,即第二个内循环:
j = 2 : 2
// 在主循环和内循环的第二次迭代中。
在此控制之后将进入下一个循环,即第二个内循环:
j = 3 : 3
//在主循环和内循环的第三次迭代中。
在此控制之后将进入下一个循环,即第二个内循环:
j = 4 : 4
//在主循环和内循环的第四次迭代中。
在此控制之后将进入下一个循环,即第二个内循环:
j = 5 : 5
// 在主循环和内循环的第五次迭代中。
在此控制之后将进入下一个循环,即第二个内循环:
j = 6 : 6
//在主循环和内循环的第六次迭代中。
在此控制之后将进入下一个循环,即第二个内循环:
j = 7 : 7
第二个内循环:
for (int k = i; k >= 1; k--) //second triangle
System.out.print((k >= 10) ?+ k : " " + k); // ternary operator is used to check the printing logic
注意:
ternary operator syntax: result = testCondition ? value1 : value2
//如果testcondition为真那么result将得到value1 else value 2
***DIY: (Take a paper pen)***
Implement for loop logic and replace variables with values:
第一次迭代:K=i(我们知道 i=1)所以 k=1; k>=1(替换变量我们得到 1>=1 这是真的);执行语句。
声明:System.out.print((k >= 10) ?+ k : " " + k);
或者
如果(1>=10)?然后打印“k”的值(即1)
else 打印“k”的值,前面有一些空格 k
(为了让金字塔看起来间隔均匀)
注意:如果您对三元运算符感到困惑,请不要使用它,您可以简单地写。
System.out.print(" " + k); // will give same output
这个控件之后会进入下一个循环,即第三个内循环:
*Second innerloop is used to print this portion:*
1
21
321
4321
54321
654321
7654321
第三个内循环:这个循环用于打印第三个三角形。
2
23
234
2345
23456
234567
for (int k = 2; k <=i; k++) // loop column
System.out.print((k >= 10) ?+ k : " " + k);
or
System.out.print(" " + k)
让我们看看完整的代码:
int x = 7;
for (int i = 1; i <= x; i++) { // loop row
for (int j = 1; j <= x - i; j++) // loop column (Triangle one)
System.out.print(" ");
for (int k = i; k >= 1; k--) // loop column (Triangle two)
System.out.print( " " + k);
for (int k = 2; k <=i; k++) // loop column (Triangle three)
System.out.print( " " + k);
System.out.println(); // used to go on new line (new row)
}