金字塔使用星号

时间:2015-03-03 20:40:11

标签: java shapes

我的一个问题是我的教授问的一个问题,那就是写一个循环,显示以下模式

我已经想出A但我的问题是B第二个

我的A

代码
 for( row = 10; row >= 0; row--)     // number of rows
         {
            for( cnt = 0; cnt < row; cnt++) // number of stars
               {
                  System.out.print( "*");
               }
               System.out.println();
         }

我做了多种不同的方式,并得出结论A) 正在进行

row(10)1.2.3.4.5.6.7.8.9.10
row(9) 1.2.3.4.5.6.7.8.9
row(8) 1.2.3.4.5.6.7.8

和B)正在做一些

的事情
row(10) 1.2.3.4.5.6.7.8.9.10
row(9)  2.3.4.5.6.7.8.9.10
row(8)  3.4.5.6.7.8.9.10

任何人都可以帮助我解决我在代码中缺少的内容,将其转换为镜像。

8 个答案:

答案 0 :(得分:1)

处理此类问题的简单方法是知道您拥有多少行并将代码基于此。第一个for循环表示金字塔有多少行,在本例中为10.基于行上的星号或空格数的方法如下。

基本上公式是:

变化率*(线)+ X =该线上的星星/空间量

首先获得变化率,然后获得X并在代码中实现它。

在第一行中你有10颗星,然后在第二颗9颗星上,在第三颗8颗星上,依此类推。为了获得变化率,你用第一个或第二个减去第二个数量的星(你得到相同的结果,因为它以相同的速率递减)。尝试9-10或8-9你得到-1。因此,如果您选择第一行,使用公式得到-1 * 1 + X = 10,其中X将等于11.如果要在第二个for循环中检查“-1 *行+11”,并且取line = 1,你得到的答案是10,这是你在第1行的星数。如果你走第2行或第3行,你会得到相同的公式。第3行,你得到-1 * 3 + X = 8,这导致X = 11。

请注意,您在代码中使用的是公式的左侧,即变化率*(行)+ X

接下来你有空格数。我不知道你在第一行有多少个空格,因此我假设你有10个空格,并且增加3.所以第一行是10,第二行是13,依此类推。您再次执行相同的步骤。您需要根据行数进行计算,首先通过减去第一行(第10-10行)中第二行的空格量来获得变化率。取第1行.3 * 1 + X = 10(因为在第一行我们有10个空格)。 X = 7.尝试行号2,3 * 2 + X = 13,你仍然得到X = 7.现在你知道你有一个可以在你的代码中使用的固定常数公式。

我们在代码中实现它。

public class Pyramid {
    public static void main (String [] args){
        for(int line = 1; line <=10; line++){
            //j is decreasing since number of stars are decreasing
            for(int j = -1*line + 11; j >=1; j--){
                System.out.print("*");
            }
            //k is decreasing since number of spaces are increasing
            for(int k = line; k <= 3*line +7; k++ ){
                System.out.print(" ");
            }

            for(int j = -1*line + 11; j >=1; j--){
                System.out.print("*");
            }
            //End of line, start new one
            System.out.println();
        }   
    }

答案 1 :(得分:0)

查看String.format(),你可以将任何字符串填充(左或右)到某个宽度,如下所示:

String stars = //use your loop from (a) to produce a number of stars
String toOutput = String.format("%10s", stars);

答案 2 :(得分:0)

你去吧!我把所有东西都放到了一个班级,这样你就可以直接运行程序..

我可能没有非常有效地实现它。

正如你所看到的那样,我正在打印从10开始的空间,并且每行增加2个空格以便镜像&#34;星号&#34;效果

public class asterisk {
    public static void main(String[] args) {
        int spaces=10;
         for( int row = 10; row >= 0; row--)     // number of rows
         {
            for( int cnt = 0; cnt < row; cnt++) // number of stars
               {
                  System.out.print( "*");
               }
               for( int cnt = 0; cnt < spaces; cnt++) {
               System.out.print( " "); }
               spaces=spaces+2;
                for( int cnt = 0; cnt < row; cnt++) {
               System.out.print( "*"); }

               System.out.println();
         }
    }
}

如果你想在A和B之间多于或少于10个空格,你只需要改变设置变量的初始值&#34;空格&#34;来!

答案 3 :(得分:0)

你想尝试这样的事情:

for( int row = 10; row >= 0; row--)     // number of rows
     {
        for( int cnt = 10; cnt - row >= 0; cnt--) // number of stars
           System.out.print(" ");
        for (int cnt = 0; cnt <= row; cnt++)
            System.out.print( "*");

        System.out.println();
     }

希望有所帮助。

答案 4 :(得分:0)

这是一个完整的代码 -

int main(){

    char star = '*';
    char space = ' ';
    int noOfTimesToPrint = 10;
    int noOfSpaceToPrint = 1;
    int line = 0;
    int starCount = 0;
    int spaceCount = 1;

    for(line=1; line<=10; line++){

     for(starCount=1; starCount<=noOfTimesToPrint; starCount++){
        printf("%c", star);
     }

     for(spaceCount=1; spaceCount<=noOfSpaceToPrint; spaceCount++){
        printf("%c", space);
     }
     noOfSpaceToPrint = noOfSpaceToPrint+2 ;

     for(starCount=1; starCount<=noOfTimesToPrint; starCount++){
        printf("%c", star);
     }
     printf("\n");
     --noOfTimesToPrint;
    }
}  

一些解释 -

  • 您可以通过设置noOfSpaceToPrint来调整要打印的空间的初始数量。这里设置为打印1个空格。您可以根据您的要求进行调整。
  • 第一个内循环块打印图像的A部分
  • 第二个内循环块打印图像的空白部分
  • 最后一个内部for循环部分打印图像的B部分
  • 外部for循环部分用于打印一行 -

第1行:********** **********

等等

希望它会有所帮助。 非常感谢

代码输出为:
enter image description here

答案 5 :(得分:0)

可能不应该将你的问题写成要求做作业的答案,但仍然是:

public class PyramidPrinter

    public static void printPyramid(boolean mirrorize) {

        for (int i = 10; i > 0; i--) {
            if (mirrorize) {
                for (int j = 10; j > 0; j--) {
                    if (j <= i) {
                        System.out.print("*");
                    } else {
                        System.out.print(" ");
                    }
                }
            } else {
                for (int j = 0; j < 10; j++) {
                    if (i > j) {
                        System.out.print("*");
                    } else {
                        System.out.print(" "); // might not even need
                    }
                }
            }
            System.out.println();
        }

    }

    public static void main(String[] args) {
        printPyramid(false); // A
        printPyramid(true);  // B
    }
}

这里的关键是使用向前和向后递增for循环的组合,基本上用星号填充空格,用空格填充垫星号。

结果:

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

答案 6 :(得分:0)

根据我在这里收集的所有信息,这是我的代码的结束结果,谢谢大家。 `

             for( row = 10; row >= 0; row--)   // number of rows
             {
                 for( cnt= 10; cnt - row >= 0; cnt--)   // number of spaces before the asterisk
                 {
                     System.out.print( " ");
                 }
                for( cnt = 0; cnt < row; cnt++) // number of stars
                  {

                     System.out.print("*");
                 }
                System.out.println();
            }


         }

`

答案 7 :(得分:0)

public class Printstar {
public static void main(String[] args){
   int space=1;
   for(int i=1;i<=10;i++)
   {
      for(int j=0;j<10-i;j++)
   {
       System.out.print("*");

   }  
      for(int j=0;j<space;j++)
          System.out.print(" ");

      for(int j=0;j<10-i;j++)
          System.out.print("*");
      System.out.println();
      space=space+2;
   }
      }}