使用 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 <= 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 循环创建圣诞树的主要内容,如果未能解决你的问题,请参考以下文章