【问题标题】:Creating a Christmas Tree using for loops使用 for 循环创建圣诞树
【发布时间】: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();  
}

我想做的是:

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

【问题讨论】:

  • 把逻辑写在一张纸上。

标签: java for-loop nested-loops


【解决方案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));
          

          【讨论】:

            猜你喜欢
            • 2019-07-15
            • 2021-04-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多