Java 如何使用星号打印沙漏?

Java 如何使用星号打印沙漏?,java,Java,对于家庭作业,我尝试构建一个程序,使用星号和空格将沙漏形状打印到屏幕上。我已经编写了下面的程序,但是它的输出看起来不像沙漏。有人能帮我理解为什么我的程序不能产生预期的输出吗 public class hourglass { public static void main(String[] args) { int x = Integer.parseInt(args[0]); int k = 2 * x - 1; int c = k;

对于家庭作业,我尝试构建一个程序,使用星号和空格将沙漏形状打印到屏幕上。我已经编写了下面的程序,但是它的输出看起来不像沙漏。有人能帮我理解为什么我的程序不能产生预期的输出吗

public class hourglass {
    public static void main(String[] args) {
        int x = Integer.parseInt(args[0]);
        int k = 2 * x - 1;
        int c = k;

        for (int j = x; j > 0; j--) {
            for (int f = j; f <= k; f++) {
                System.out.print("*");
            }
            for (int o = 1; o <= c; o++) {
                if (k % 2 == 0) System.out.print(" ");
                else System.out.print(" ");
            }
            System.out.print("\n");
        }
    }
}
公共类沙漏{
公共静态void main(字符串[]args){
intx=Integer.parseInt(args[0]);
int k=2*x-1;
int c=k;
对于(int j=x;j>0;j--){

对于(int f=j;f如果您不在代码中思考(新手会做什么?),您可以尝试从写一篇散文(-ish)描述您的程序将如何执行其任务开始,然后编写与散文相匹配的代码。例如,您可以从以下内容开始:

给定一个表示沙漏形状宽度的输入
x
,将沙漏打印到屏幕上,作为一系列包含星号和空格的行。每行上的星号数将从
x
开始,每行倒数两个,直到包含少于两个星号的行,然后每行倒数两个直到它再次到达
x
。每行将打印适当数量的前导空格,使该行的星号相对于其他行居中(假设空格与星号的宽度相同)

您甚至可以将其作为注释放入源代码中。事实上,它可以帮助您将其分解为几个较小的注释,这样您就可以按照每个逻辑思想编写专门与该思想对应的代码。如果您这样做,那么它不仅可以帮助您组织代码,而且最终会生成一个文档化良好的程序不需要任何额外的努力


如果你将我的散文与你的程序进行比较,你会发现两者的相同点和不同点。你的程序会进行某种倒计时,在每一步打印零个或多个空格字符、一些星号,然后换行结束。这些基本上都是正确的操作,但细节是错误的。错误和奇怪的已经够多了足够的错误,事实上,我倾向于怀疑这个程序是从外部来源而不是精心设计的从头开始的。我建议你把注意力集中在自己编写程序上。事实上,首先考虑抛出<代码>主代码()/<代码>中的所有内容,除了<代码> int x=整数。(args[0]);

您需要选择一个更好的标题。您当前的标题没有多大帮助。您将有更好的机会避免被吃掉(并获得有用的答案)如果您有所了解。欢迎使用Stack Overflow。请编辑您的标题并选择一个更好的标题,该标题实际上描述了您的问题。另外,请使用so you know@Josef,格式不好的代码很难阅读。虽然我感谢您添加缺少的右大括号,但在这个过程中,您并没有帮助自己重读我为你做的垫子。我知道这不是CodeReview.SE,而是你自己(和我们)做的帮个忙,使用有意义的变量名。
x
k
c
j
o
?您可以使用
topWidth
baseWidth
height
。对于for循环,您可以重用一个增量变量,比如
i
,或者将其称为
width
。就这样告诉我一些可以使编写/阅读代码更容易的想法。
public class hourglass
{
  public static void main(String[] args)
  { 
    int valueIn = Integer.parseInt(args[0]); 
    int maxVALUE = 2*valueIn ;

    for( int i = 0 ;  (valueIn - 1) > i; i--)
    {for( int j =1 ; j < maxVALUE; i++)
      {

      System.out.print("*");}
  for (int o = 1; o < maxVALUE; o++) {
    if (maxVALUE % 2 == 0) System.out.print(" ");
    else System.out.print(" ");
   }
   System.out.print("\n");




  }
 }
}
public class mathrandom
{
  public static void main ( String [] args) 
  {
    int valueIn = Integer.parseInt(args[0]);


    for ( int i = valueIn;  1  <= i; i--){
      for ( int k = i ; k < 2*valueIn -1; k++)
      {System.out.print(" ");}
      {for ( int j = 1; j <= (i*2)-1; j++)
        {
        System.out.  print("*");


      }

        System.out.println();  
    }

}


  }}