使用for循环的java金字塔/三角形

时间:2015-01-06 14:46:26

标签: java

我想要打印三角形/金字塔样式,如:

   1
  323
 54345
7654567

这是我的代码:

int lines = 5;

    for (int i = 1; i < lines; i++) {

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

        for (int j = i; j > 1; j--) { //this for loop is my problem. any solution?
            System.out.print(j);
        }

        for (int j = i; j < i+i; j++) { 
            System.out.print(j);
        }
        System.out.println();
}

我得到的是

   1
  223
 32345
4324567

我在办公室工作时一直在研究代码,我认为即使我在谷歌使用搜索,我仍然无法找到解决方案。 我只是通过条件增强我的逻辑,没有重型面向对象或递归。

3 个答案:

答案 0 :(得分:4)

你的第一个循环中的问题是你在第二个循环中发现的问题! (它与循环中最大的数字有关)

for (int j = i; j > 1; j--) { //this for loop is my problem. any solution?
    System.out.print(j);
}

查看金字塔左侧的数字。它们从右端的那些开始(金字塔的每一行都是对称的)。该数字的通用公式为i + i - 1,其中i是外部循环中的行号。

第二行从2 * i - 1 = 2 * 2 - 1 = 3开始。第三行从2 * 3 - 1 = 5等开始。

因此,您的第二个内循环应如下所示:

for (int j = i + i - 1; j > i; j--) {
    System.out.print(j);
}

答案 1 :(得分:1)

这是完整的固定来源。

你必须从第i个奇数开始。这是i*2-1。你停在i。这也通过将其更改为lines = 4来修复引入的间距差异。

int lines = 4;

for (int i = 1; i <= lines; i++) {

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

    for (int j = i*2-1; j > i; j--) { //this for loop is my problem. any solution?
        System.out.print(j);
    }

    for (int j = i; j < i+i; j++) { 
        System.out.print(j);
    }
    System.out.println();
}

在此处运行:http://ideone.com/AKsc1f

答案 2 :(得分:0)

int lines = 4;

for(int i = 1; i&lt; = lines; i ++){

for (int j = 1; j < lines-i+1; j++) { 
    System.out.print(" ");
}
//replace this
for(int j=0; j<i-1; j++) System.out.print(i*2-j-1);
 System.out.print(i);
 for(int j=; j<i-1;j++) System.out.print(i+j+1);
//==========
System.out.println();

}