解释用Java创建金字塔

我是一个初学java编程类,目前正在审查循环。 如果有一件事我不明白,那就是金字塔。 我已经在线研究了书籍练习,并找到了金字塔示例的解决方案,但即使看到代码,我仍然不理解,如果我的生活依赖于它,我无法重新创建答案。

下面是金字塔示例和创建它的代码。 如果有人可以通过代码并逐行给我一个“假人”解释正在发生的事情,那么也许我终于明白了。

在此先感谢您的帮助!

恩。 创建以下金字塔:

1 2 1 2 3 2 1 2 3 4 3 2 1 2 3 4 5 4 3 2 1 2 3 4 5 6 5 4 3 2 1 2 3 4 5 6 7 6 5 4 3 2 1 2 3 4 5 6 7 
 class Pyramid { public static void main(String[] args) { int x = 7; for (int i = 1; i <= x; i++) { for (int j = 1; j = 1; k--) System.out.print((k >= 10) ?+ k : " " + k); for (int k = 2; k = 10) ?+ k : " " + k); System.out.println(); } } } 

金字塔中有7行,因此第一个for循环遍历行,第二个for循环是打印一堆空格,因此三角形不会显示为:

 1 2 1 2 3 2 1 2 3 

第三个for循环(带k),有一个条件运算符,其工作方式如下:

 boolean-expression ? result-if-true : result-if-false 

因此它要么将数字k添加到字符串中,要么添加一个空格,然后将数字k添加到字符串中。

第四个循环做类似的事情。

首先将x声明为7.然后启动for循环。 这个循环将从一个变量i变为1开始。只要for循环的第二部分( i <= x )计算,它的内容(以{开头并以相应的}结尾的代码块)将运行为真。 在这样的执行结束时,将执行最后一部分: i++ ,它将变量i递增1。

那么会发生什么:

  • 我设置为1
  • 我<= x?
    • 是! 1小于或等于7.执行代码块中的内容。
  • 我从1到2
  • 我<= x?
    • 是! 2小于或等于7.执行代码块中的内容。
  • ......几次迭代......
  • 我从7到8
    • 我<= x?
    • 没有! 8不小于或等于7.对于循环结束。

那是外循环。 现在,我们需要弄清楚在for循环的这种迭代中会发生什么。 那么让我们来看看执行7次的代码块。

 for (int j = 1; j <= x - i; j++) System.out.print(" "); for (int k = i; k >= 1; k--) System.out.print((k >=10) ?+ k : " " + k); for (int k = 2; k <=i; k++) System.out.print((k>= 10) ?+ k : " " + k); System.out.println(); 

这里有三个逻辑部分,方便地用空行分隔。 这里可能令人困惑的是,这三个部分位于外部for循环的代码块中,但不会更深入地嵌套。 看看第一个:

 for (int j = 1; j <= x - i; j++) System.out.print(" "); 

这次没有{}来划分for的代码块的一部分。 默认情况下,这意味着只有下一个语句是它的一部分,或者在本例中是System.out.print(" ");

那段代码会发生什么? 嗯,这是另一个,这次从1开始直到x - ix仍然是7,但i依赖于我们所在的外部for循环的哪个迭代。第一次循环它将是1.这将对应于您在输出中看到的第一行。 第二次,它将是2 。 这将对应于输出的第二行。

所以假设这是外部for循环的第一次迭代。 x - i真的是7 - 1 ,这是6.我们让一些变量j从1到6.从这6次中,我们打印出3个空格字符。

在那之后,我们到达第二部分:

 for (int k = i; k >= 1; k--) System.out.print((k >=10) ?+ k : " " + k); 

另一个for循环,但有一个扭曲。 这个使用从i开始的变量k ,然后向下计数到1,如k-- 。 对于每个迭代,它会向输出打印更多内容。 这次打印语句的内容有点复杂。 它使用三元运算符。 将评估第一位(k >=10) 。 如果是真的,它将在之前返回该位:否则它将在以下之后返回: 在这种情况下,这意味着如果k大于或等于10,它将打印出k的值。 否则,它将打印出两个空格加上k的值。

在此之后,最后一点应该很容易理解。 请注意,在for循环及其单个语句之后,有一个System.out.println(); 所有这一切都打印出换行符,使输出转到下一行。

这标志着外部for循环的一次迭代的结束。 只要ix (在我们的例子中为7),另一次迭代将开始,这三个部分将运行。 由于这三个内部for循环依赖于i ,因此它们总是运行不同的次数。

在心理上做以下事情:至少进行三次外部for循环迭代。 这意味着,想想i是1并且在精神上执行{}之间的stuf。 然后想想i是2并做同样的事情。 再做3次,到现在它应该开始变得清晰。

祝你好运!

 public static void main(String[] args) { // levels in the pyramid int x = 5; for (int i = 1; i <= x; i++) { // for spacing for (int j = 1; j <= x - i; j++){ System.out.print(" "); } // left half of the pyramid for (int k = i; k >= 1; k--){ System.out.print((k >= 10) ? +k : " " + k); } // corresponding right half of the pyramid for (int k = 2; k <= i; k++) { System.out.print((k >= 10) ? +k : " " + k); } // next line System.out.println(); } } 

图片来源: http : //www.skilledmonster.com/2013/10/28/java-pyramid-example-pattern-11/

如果它有帮助你也可以尝试这个:)

  * *** ***** ******* ********* 

OUTPUT:

 ROW (1) * --> COLUMN | (2) * | (3) *** | (4) ***** v (5) ******* 

代码逻辑 :首先将金字塔划分为3个三角形。

 ####$ ###$$@ ##$$$@@ #$$$$@@@ $$$$$@@@@ 

1> 第一个三角形 (由#表示的空格)

 #### ### ## # 

2> 第二个三角形 (以$表示)

 $ $$ $$$ $$$$ $$$$$ 

3> 第三个三角形 (以@表示)

 # @ @@ @@@ @@@@ 

它将共同构成金字塔结构

码:

 pyramid() { for (int i = 1; i <= 5; i++) { // loop row for (int k = 1; k <= 5 - i; k++) { // 1st triangle (printing space) System.out.print(" "); } for (int j = 1; j <= i; j++) { // 2nd triangle System.out.print("*"); } for (int l = 1; l <= i - 1; l++) { //3rd triangle if (i == 1) { break; } System.out.print("*"); } System.out.println(); } } 

让我们先了解For循环:

For Loop:

它围绕一组有限的重复代码构建。 因此,如果您有一个特定的代码块,您希望一次又一次地运行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 <= x)替换I和x的值(1 <= 7)。

在循环体内执行此语句后,最后“i ++”即“I”的值将递增(我将变为2)。

每次重复此过程,直到条件(I <= x)为真。


现在让我们了解模式是如何形成的:

 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 <= 7-1(将打印)######

//主循环和内循环的第一次迭代。

在此控件之后将转到下一个循环,即第二个内循环:

j = 2:2 <= 7-1(将打印)#####

//在主循环和内循环的第二次迭代中。

在此控件之后将转到下一个循环,即第二个内循环:

j = 3:3 <= 7-1(将打印)####

//在主循环和内循环的第三次迭代中。

在此控件之后将转到下一个循环,即第二个内循环:

j = 4:4 <= 7-1(将打印)###

//在主循环和内循环的第四次迭代中。

在此控件之后将转到下一个循环,即第二个内循环:

j = 5:5 <= 7-1(将打印)##
//在主循环和内循环的第五次迭代中。

在此控件之后将转到下一个循环,即第二个内循环:

j = 6:6 <= 7-1(将打印)#

//在主循环和内循环的第六次迭代中。

在此控件之后将转到下一个循环,即第二个内循环:

j = 7:7 <= 7-1 //第一个内环的结束为(7 <= 6不成立)


第二内环:

 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为true,则result将获得value1 else值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)

否则打印“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) } 

我们也可以使用一个for循环创建金字塔,从而使其在执行时间方面具有高效的代码。

这是打印星号金字塔的代码。

 public class PyramidPrinting { public static void main(String[] args) { int h = 5; int i,j; char[] arr = new char[2*h-1]; for(i=h-1,j=h-1; i>=0 && j<=2*h-1; i--,j++){ arr[i]='*'; arr[j]='*'; System.out.println(arr); } } } 

输出:

  * *** ***** ******* ********* 

好吧,我制作了一个类似的程序,没有任何问题和想象力…代码是如此清晰:D

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { int i,j,k, n = Integer.parseInt(jTextField1.getText()); for(i=1;i<=n;i++) // normal loop { for(j=1; j<=(ni);j++) { System.out.print(" "); // loop for spaces } for(k=1;k<=i;k++) // loop for printing numbers { System.out.print(k+" "); } System.out.println(); } // TODO add your handling code here: }