【问题标题】:How do I print out an hourglass using asterisks?如何使用星号打印出沙漏?
【发布时间】:2015-09-21 18:52:16
【问题描述】:

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

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");
        }
    }
}

编辑:我重新编写了程序,现在它只打印到无穷大和更远的地方,我理解我需要输入一个 x 数然后运行一个 for 循环的逻辑,每次我通过它时,我从 -1 X。 任何人都可以帮我解决这个问题吗?我只是想加深对 Java 的理解。

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");




  }
 }
}

编辑 2* 如果有人看得很清楚,我去。 在过去的 8 个小时里,我自己构建了一个代码,现在我被卡住了,我不知道如何“反转”我的 for 循环以使其打印到另一个方向这是我的代码,我不知道不知道该怎么做,如果有人能给我任何关于如何做到这一点的见解,我会非常高兴,我尝试做一个 if case if(i == 0) 但这从未发生过,我什至尝试过做那个 if case = =1;但随后循环永远运行。 关于如何完成我的程序的任何指示?

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();  
    }

}


  }}

【问题讨论】:

  • 你需要选择一个更好的标题。你当前的不是很有帮助。
  • 如果您学习how to ask a question,您将更有可能避免被吃掉(并获得有用的答案)。
  • 欢迎来到 Stack Overflow。请编辑您的标题并选择一个更好的标题,它可以实际描述您的问题。也请拍下tour,这样你就知道how to ask on topic questions
  • @Josef,格式差的代码很难阅读。尽管我感谢您添加缺少的右大括号,但您不会在破坏我为您执行的重新格式化的过程中帮助自己。
  • 我知道这不是 CodeReview.SE,但请帮自己(和我们)一个忙,使用有意义的变量名。 x,k,c,j,o?您可以使用topWidthbaseWidthheight 等名称。您可以为 for 循环重用像 i 这样的增量变量 - 或将其称为像 width 这样的名称。只是一些可以让编写/阅读代码更容易的想法。

标签: java


【解决方案1】:

如果您不思考代码(新手会做什么?),您可以尝试先写一个散文(-ish)描述您的程序将如何执行其任务,然后编写匹配的代码散文。例如,您可以从:

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

您甚至可以将其作为注释放入源代码中。事实上,将其分解为几个较小的 cmets 会有所帮助,这样您就可以使用专门对应于该思想的代码来遵循每个逻辑思想。如果您这样做,那么它不仅可以帮助您组织代码,而且您最终会得到一个记录良好的程序,而无需任何额外的努力。

如果您将我的散文与您的程序进行比较,您应该会看到相似之处和不同之处。您的程序执行某种倒计时,在每一步打印零个或多个空格字符、一些星号,然后换行以结束该行。这些基本上是它要做的正确的事情,但细节是错误的。错误的够多,也够奇怪的错误,事实上,我倾向于怀疑该程序更多地是从外部资源中抄袭的,而不是经过深思熟虑构建的de novo。我建议您从这里开始将注意力集中在编写自己的程序上。事实上,可以考虑先扔掉main() 中的所有内容,int x = Integer.parseInt(args[0]); 除外。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 2012-09-05
    相关资源
    最近更新 更多