使用Java打印三角形(半金字塔)图案

时间:2014-08-02 02:58:38

标签: java geometry

我必须打印一个三角形图案(半金字塔),如

1
0 1
1 0 1
0 1 0 1

我尝试过这个程序

class tri{
 public static void main(String arg[]){
    int i,j,a = 1, b =0, c=0;
    for(i=1; i<=4; i++){

        for(j=1; j<=i; j++){
            System.out.print(a+ " ");
            c = a;
            a = b;
            b = c;              
        }
        System.out.println();
    }
 }
}

但是这会打印图像,如图所示

Output of above code

如果有人可以帮我编辑代码以带来模式

9 个答案:

答案 0 :(得分:5)

您需要正确设置起始值。因为你正在做的是不断交换

说第二行0 1

最后一个元素= 1,(a = 1, b = 0)以及为下一行第一个元素交换(a = 0, b = 1)

然而这是不正确的,因为它应该从(a = 1)而不是(a = 0)开始。

        int i,j,a = 1, b =0, c=0;
        for (i = 1; i <= 4; i++){
            if (i % 2 == 0) {
                a = 0;
                b = 1;          
            } else {
                a = 1;
                b = 0;          
            } 
            for(j=1; j<=i; j++) {
                System.out.print(a+ " ");
                c = a; 
                a = b;
                b = c;                           
            }           
            System.out.println();
        }

您还可以使用XOR:

01之间切换
int i, j, a = 1;
for (i = 1; i <= 4; i++){
    a = i % 2;          
    for(j=1; j<=i; j++) {
        System.out.print(a+ " ");
        a = a ^ 1;                         
    }           
    System.out.println();
}

然而,更短的解决方案是:

String str = "";
for (int i = 1; i <= 4; i++) {
    str = (i % 2) + " " + str;  
    System.out.println(str);    
} 

输出:

1 
0 1 
1 0 1 
0 1 0 1 

答案 1 :(得分:5)

最短的将是

String str = "";
for (int i = 1; i <= 4; i++) {
    str = (i % 2) + " " + str;  
    System.out.println(str);    
} 

这将根据需要提供输出

1
0 1
1 0 1
0 1 0 1

答案 2 :(得分:3)

您可以使用布尔标志来检查当前是从1还是0开始;

<强>样品:

boolean flag = true;
    for(int i=1; i<=4; i++){

        for(int j=1; j<=i; j++){
            if(flag)
                System.out.print("1 ");
            else
                System.out.print("0 ");
            flag = !flag;
        }
        if((i % 2) == 0)
            flag = true;
        else
            flag = false;
        System.out.println();
    }

<强>结果:

1 
0 1 
1 0 1 
0 1 0 1 

答案 3 :(得分:2)

   int x=1,y=1;
   for(int i=1;i<8;i++){
       for(int k=0;k<i;k++){
           y=(k==0) ? x:y;
           System.out.print(y+" ");
           y=(y==1) ? 0:1;
       }
       System.out.println("");
       x=(x==1) ? 0:1;
   }

输出--- enter image description here

答案 4 :(得分:1)

在这里写我的anwser,看到@sujithvm解决方案更简短有效。

    int sideLength = 4;
    for(int i = 0 ; i < sideLength ; i++)
    {
        for(int j = 0 ; j <= i ; j++)
        {
            System.out.print((i + j + 1) % 2 + " ");
        }
        System.out.println();
    }

答案 5 :(得分:0)

为初学者完成Java程序:

公共类PrintPattern15

{

public static void main(String args[])
{
    int n = 5;
    PrintPattern15 d = new PrintPattern15();
    d.printPattern(n);
}
public void printPattern(int noOfRows)
{   
    for(int i = 1; i <= noOfRows; i++ )
    {
        printRows(i);
    }
}
public void printRows(int startPt)
{   
    for(int i = startPt ; i >= 1; i--)
    {
        System.out.print(i%2);
    }
        System.out.println();

}

}

答案 6 :(得分:0)

这对我有用:

public class DrawPattern {

    public static void main(String[] args) {
        int i, j;
        int num = 7;
        for (i = 0; i <num; i++) {
            for (j = 0; j < i; j++) {
                if (isConditionMatch(num, i, j)) {
                    System.out.print("0");
                } else {
                    System.out.print("1");
                }
            }
            System.out.println();
        }

    }

    private static boolean isConditionMatch(int num, int i, int j) {
        return (i%2 != 0 && j%2 !=0 || (i%2 == 0 && j%2==0));
    }
}

输出:

1
01
101
0101
10101
010101

答案 7 :(得分:0)

<强>代码

public class pra1 {
    public static void main(String[] args) {
        int  space, rows=11, k=0;
          //  Scanner scan = new Scanner(System.in);
          //  System.out.print("Enter Number of Rows : ");
          //  rows = scan.nextInt();
        //  rowa=6;

            for(int i=1; i<=rows; i++)
            {
                for(space=1; space<=(rows-i); space++)
                {
                    System.out.print("  ");
                }
                while(k != (2*i-1))
                {  // int p=k;
                    if(k%2==0)
                    {

                    System.out.print("1 ");
                   //  System.out.print("  ");
                    }if(k%2!=0 )
                    {

                    System.out.print("0 ");
                   // System.out.print("  ");
                    }

                    else{
                    System.out.print("");
                    }
                 //   p--;
                    k++;
                }
                k = 0;
                System.out.println();
            }

    }

}

<强>输出

                    1 
                  1 0 1 
                1 0 1 0 1 
              1 0 1 0 1 0 1 
            1 0 1 0 1 0 1 0 1 
          1 0 1 0 1 0 1 0 1 0 1 
        1 0 1 0 1 0 1 0 1 0 1 0 1 
      1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 
    1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 
  1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 

答案 8 :(得分:0)

这是我解决问题的方法:

int k = 0;    
for (i = 1; i <= 4; i++){
k = (i%2 == 0)? 1:0;

for(j=1; j<=i; j++) {
    System.out.print(k+ " ");
    k = k==0?1:0;                       
}           
System.out.println();
}