【问题标题】:Drawing exercise in javajava中的绘图练习
【发布时间】:2017-06-16 22:35:49
【问题描述】:

我应该用java编写这个程序,它要求我编写一个发出由星号组成的V的程序,如下图所示:

        *
       *
*     *
 *   *
  * *
   *

这是我创建的程序,但它不起作用:

import java.util.*;

public class Disegnav{
  public static void main (String [] arg){
    Scanner sc = new Scanner(System.in);
    for(int i = 5; i>0; i--){
        int k = 9, l=0, x=3;
        for(int j = 0; j<=9 ; j++){
            if(i>3 && j<k)
                System.out.print(" ");
            else
                if(j==k || i==l || i==x)
                    System.out.print("*");
                else
                    System.out.print(" ");
            k--;
            l++;
            x--;
        }
        System.out.println();
    }
  }
}

【问题讨论】:

  • 您能否更准确地说,“这不起作用”是什么意思?
  • 你能更清楚你的图案是静态的还是动态的。既然你用过扫描仪
  • 表示是最接近当年需求但没有按要求打印的程序
  • 它是一个简单的 main,不使用外部类

标签: java if-statement for-loop conditional-statements


【解决方案1】:

好的,我可以给你一个算法,但你必须自己尝试一下。

请注意,第一行的空格数是 7,然后是 *。尝试打印。

第二行也是如此,但有 6 个空格和一个 *

观察到第三行两边都有*。所以按照相同的逻辑打印一个*然后5空格和一个*。观察由于两边都有星星,你需要将空格数减少2。同时增加在每行打印第一个* 之前,按1 计算空间。希望你能明白。

并反复执行,直到没有剩余空间计数。

【讨论】:

    【解决方案2】:

    问题的一般解决方案。

    import java.util.*;
    
    public class Disegnav{
      public static void main (String [] arg){
        Scanner sc = new Scanner(System.in);
        int param = sc.nextInt() - 1;
        for(int i = 0; i < param; i++){
            for (int j = 0; j < i; j++) {
              System.out.print(" ");
            }
            System.out.print("*");
            for (int j = 0; j < 2 * param - 2 * i - 1; j++) {
              System.out.print(" ");
            }
            System.out.print("*");
            System.out.println();
        }
        for (int i = 0; i < param; i++) {
          System.out.print(" ");
        }
        System.out.print("*");
        System.out.println();
      }
    }
    

    【讨论】:

      【解决方案3】:

      为什么这么复杂?让我们保持简短!

      class Draw {
          public static void main(String... args) {
              for (int x = -2, y = 8; x <= 3; ++x) {
                  String before = (x >= 0) ? String.format("%" + (x+1) + "s", "*") : "";
                  String after = (y > 0) ? String.format("%" + (y+1) + "s", "*") : "";
                  System.out.println(before + after);
                  y -= (x >= -1) ? 2 : 1;
              }
          }
      }
      

      一开始我知道这可能很神秘,但我可以做一些简单的解释,以防你喜欢这个。

      另请注意,这并不能解决一般问题,有硬编码的大小常量仅针对您的情况解决问题。

      我还从问题中假设,您不想在程序中发现错误。

      【讨论】:

        【解决方案4】:

        我不知道任务条件,但最简单的方法是:

        public static void main (String [] arg){
        System.out.println("        *\n" +
            "       *\n" +
            "*     *\n" +
            " *   *\n" +
            "  * *\n" +
            "   *");
        

        }

        【讨论】:

        • 我也用过这个方法,但是在提示中写的是避免这个解决方案,这就是我卡住的原因
        • 好一个!申请KISS principle ;)
        猜你喜欢
        • 2010-11-06
        • 2012-10-11
        • 1970-01-01
        • 2014-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多