如何使用两个for循环在Java中绘制Isosceles Triangle?

时间:2017-08-20 06:04:18

标签: java

我可以使用3个for循环绘制此模式三角形,但我想仅使用2个for循环绘制。

1 

1 2 

1 2 3 

1 2 3 4 

1 2 3 4 5 

1 2 3 4 5 6 

1 2 3 4 5 6 7 

1 2 3 4 5 6 

1 2 3 4 5 

1 2 3 4 

1 2 3 

1 2 

1 

我的程序有3个循环

import java.util.Scanner;

class Isotrg {

    public static void main(String[] args) {
        int n;
        System.out.println("Enter the No. Line:");
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();

        for (int i = 0; i < (2 * n) - 1; i++)
        {
            int d = 1;
            if (i < n)
            {
                for (int j = 0; j <= i; j++)
                {
                    System.out.print(d + " ");
                    d++;
                }
                System.out.println();
            }
            else
            {
                for(int j = 1; j < (2 * n) - i; j++)
                {
                    System.out.print(d + " ");
                    d++;
                }
                System.out.println();
            }
        }
    }
}

3 个答案:

答案 0 :(得分:1)

int n=6;
for (int i=0; i<2*n+1; ++i)
{
    int k=Math.min(i, 2*n+-i);
    for (int j=0; j<=k; ++j)
    {
        System.out.print(j+1 + " ");
    }
    System.out.println();
}

答案 1 :(得分:0)

您给出的代码已经执行了正确打印三角形的所有正确步骤。这里关注的关键是你的for循环的停止条件。在i < n(在这种情况下,i小于7时),您不希望j超过i。当i大于n时,您不希望j超过2n - i

因此,综合考虑这两个条件,您希望j小于i并且您希望它小于2n - i。只需使用logical AND operator加入这两个条件即可。您还必须适当调整循环的边界,检查两端ij的相对值,以确保它们正确排列:

public static void main(String[] args) {
    int n;
    System.out.println("Enter the No. Line:");
    Scanner sc = new Scanner(System.in);
    n = sc.nextInt();

    for (int i = 1; i < (2 * n); i++)
    {
        for (int j = 1; j <= i && j <= (2 * n) - i; j++)
        {
            System.out.print(j + " ");
        }
        System.out.println();
    }
}

此外,请注意您可以删除不必要的中间变量d

答案 2 :(得分:0)

希望这有帮助!

int n=7;
for(int i=1;i<2*n;i++)
{
    for(int j=1;j<=Math.min(i,2*n-i);j++)
        System.out.print(j + " ");
    System.out.println();
}