使用 for 循环创建圣诞树

Posted

技术标签:

【中文标题】使用 for 循环创建圣诞树【英文标题】:Creating a Christmas Tree using for loops 【发布时间】:2015-08-23 18:02:48 【问题描述】:

我正在尝试使用 for 循环和嵌套 for 循环制作一棵圣诞树。为了做到这一点,我需要能够用 *.我已经尝试了无数次,但我在制作一个时遇到了问题。这是我的代码:

for(int i=1;i<=10;i++)
    for(int j=10;j>i;j--)
        System.out.println(" ");   
    

    for(int k=1;k<=i;k++)
        System.out.print("*");
    

    for(int l=10;l<=1;l++)
        for(int h=1;h<=10;h++)
            System.out.print(" ");
        
    

    System.out.println();  

我想做的是:

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

【问题讨论】:

把逻辑写在一张纸上。 【参考方案1】:
    public class ChristmasTree 
              
    public static void printStars(int number) 
            for (int i = 1; i <= number; i++) 
                System.out.print("*");
            
            System.out.println("");
        
    
        public static void printSpaces(int number) 
            for (int i = 0; i < number; i++) 
                System.out.print(" ");
            
        
    
        public static void christmasTree(int height) 
            for (int i = 1; i <= height; i++) 
                printSpaces(height - i);
                printStars(i + (i - 1));
            
         

 public static void main(String[] args) 
     //     int x = pick some number, but not TOO big )))
          christmasTree(x);
      
    

【讨论】:

【参考方案2】:
def fist(n)
 k=2*n-2
  for i in range(0,n):
   for j in range(0,k):
   k=k-1
    print(end=" ')
   for j in range(0,i+1):
    print("*",end=" ")
   print()
def second(n)
 k=2*n-2
  for i in range(0,n):
   for j in range(0,k):
   k=k-1
   print(end=" ')
   for j in range(0,i+1):
    print("*",end=" ")
   print()
def stem(m)
 k=11
  for i in range(0,5):
   for j in range(0,k):
   print(end=" ")
   for j in range(0,3):
    print("*",end=" ")
   print()
first(7)
second(7)
steam(3)

【讨论】:

【参考方案3】:
public class ChrismasTree 

    public static void main(String[] args) 

        int sizeOfTree = 9;
        double remainderVal = sizeOfTree % 2 ;
        double ans = sizeOfTree / 2 ;

        if (remainderVal == 0) 
            System.out.println("Invalid number enter 9,19 calculat rest yourself u looser ..");
            System.exit(0);
        
        int middlePos = (int) Math.round(ans + .5);

        for (int i = 0; i <= sizeOfTree; i++) 
            int lStar = middlePos - i;
            int rStar = middlePos + i;

            if (lStar < 1) 
                break;
            
            printleaves(lStar, rStar, sizeOfTree);
        
    

    public static void printleaves(int a,int b, int size)
        System.out.println();
        for (int i = 1; i <= size; i++) 
            if (i > a && i < b )
                System.out.print("*");
            else System.out.print(" ");    
           
    

【讨论】:

【参考方案4】:
import java.util.Scanner;

public class cmastree

    public static void main (String[]args)
        Scanner keyboard=new Scanner (System.in);

        int j;
        System.out.println ("Enter a number");
        j=keyboard.nextInt();
        /*take the above part out and change the j variable if you want to set 
        the size*/
        for(int i=1; i<=j; i+=2)
            int numSpaces = (j-i)/2;
        for (int k=0; k<numSpaces; k++)
            System.out.print(" ");
            
        for(int k=0; k<numSpaces; k++)
            System.out.print("*");
            
            System.out.println();
        
    

【讨论】:

【参考方案5】:
public class Stars 

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) 
       Scanner s=new Scanner(System.in);
       System.out.println("Enter Row/Column Value::");
        int i,j,k,n;
        n=s.nextInt();
        for(i=1; i<n; i++)
            for(j=n+(n/2); j>i; j--)
                System.out.print(" ");
            for(k=1; k<=2*i-1; k++)
                System.out.print("*");
            System.out.println("");
            
         for(i=1; i<n+(n/2); i++)
            for(j=n+(n/2); j>i; j--)
                System.out.print(" ");
            for(k=1; k<=2*i-1; k++)
                System.out.print("*");
            System.out.println("");
        
          for(i=1; i<n-(n/2); i++)
            for(j=n+(n/2); j>1; j--)
                System.out.print(" ");
            for(k=n/2; k<=(n/2)+1; k++)
                System.out.print("*");
            System.out.println("");
        
    

【讨论】:

以上程序打印圣诞树。 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。【参考方案6】:

试试这个更简单的代码:

public class ChristmasTree 

 public static void main(String[] args) 

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

它使用 3 个循环:

第一个为行数, 第二个用于打印空格, 第三个用于打印星号。

【讨论】:

感谢它的工作。你能解释一下你为什么做 2*i+1 第一次迭代 ((2*0)+1) = 1 星。第二次迭代 ((2*1)+1) = 3 颗星。第三次迭代 ((2*2)+1) = 5 颗星,以此类推。 看第 1 行有 1 颗星。第 2 行有 3 颗星,第 3 行有 5 颗星。所以它遵循 2*(n-1)+1 的一般规则。由于我们的 i 从 0 开始,所以 (n-1)=i。因此第 (i+1) 行中的星数 = 2*i+1。 如果我写for (int k = 0; k &lt;= 2 * i; k++) => 它也可以工作......怎么样? 2*0 = 0,为什么它会在第一个row 中打印一个* @HuserB1989 因为它满足条件 【参考方案7】:

你可以用简单的逻辑做到这一点

for (int i = 0; i < 4; i++) 
            System.out.println("   *******".substring(i, 4 + 2*i));

【讨论】:

以上是关于使用 for 循环创建圣诞树的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript 打印基本的圣诞树?

如何使用 for 循环创建 UIImageView 动态网格?

GO 使用由 for 循环创建的通道

使用 for 循环创建多维数组

如何使用“for”循环创建变量名? [复制]

php循环创建数组