【问题标题】:Java Drawing Shape with "*"带有“*”的 Java 绘图形状
【发布时间】:2018-07-03 00:22:31
【问题描述】:

我对编程很陌生,只是想看看是否有更简单的方法来创建下面的形状。

我多次使用System.out.println() 得到了这个形状,但我只是想看看是否有更简洁的方法来创建它。我用这段代码得到了形状,但如果有人有其他方法,请告诉我!

public static void main(String[] args) {
    System.out.println("******");
    System.out.println(" *    *");
    System.out.println("  *    *");
    System.out.println("   ******");
    System.out.println("  *    *");
    System.out.println(" *    *");
    System.out.println("******");
    System.out.println(" *    *");
    System.out.println("  *    *");
    System.out.println("   ******");
}

【问题讨论】:

标签: java


【解决方案1】:

所以我认为您希望在输出控制台中使用它

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

那么为什么不在控制台中创建一个静态函数和一个用于输出的for:

public static void main(String[]args) 
{
    Scanner scan = new Scanner(System.in);
    int howManyTimes = scan.nextInt();

    for(int i=0;i<howManyTimes;i++)
    {
        outPut();
    }
    System.out.println("******"); // For always closing the Graph
}

public static void outPut()
    {
        System.out.println("******");
        System.out.println(" *    *");
        System.out.println("  *    *");
        System.out.println("   ******");
        System.out.println("  *    *");
        System.out.println(" *    *");
    }

输入 5

输出:

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

【讨论】:

    【解决方案2】:

    说明

    这里重复了两件事:

    ******
    *    *
    

    其余代码仅根据您为模式添加前缀空格将模式向右移动的整体逻辑进行调整或回到左边。


    基础

    所以,我们先创建两个方法和一个小辅助方法:

    private static String constructPrefix(int length) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < length; i++) {
            sb.append(" ");
        }
        return sb.toString();
    }
    
    private static void printDelimiter(int indent) {
        System.out.println(constructPrefix(indent) + "******");
    }
    
    private static void printPart(int indent) {
        System.out.println(constructPrefix(indent) + "*    *");
    }
    

    运动

    接下来我们将创建一个将序列向右移动和向左移动的辅助方法:

    private static void printSequenceToRight(int indentRight) {
        // Start with an indent of one, include the end
        for (int i = 0; i <= indentRight; i++) {
            printPart(i);
        }
    }
    
    private static void printSequenceToLeft(int indentRight) {
        // Start with right end, include one
        for (int i = indentRight; i >= 1; i--) {
            printPart(i);
        }
    }
    

    序列

    现在我们需要一个打印序列一部分的方法。让我们定义一个部分总是以分隔符开始,并且没有分隔符结束。

    private static void printSequence(int indent) {
        printDelimiter(0);
        printSequenceToRight(indent - 1);
        printDelimiter(indent);
        printSequenceToLeft(indent - 1);
    }
    

    最后,我们需要的是一个打印完整序列的方法,即重复一个序列(并附加最后的分隔符):

    public static void printFullSequence(int amount, int indent) {
        for (int i = 0; i < amount; i++) {
            printSequence(indent);
        }
        printDelimiter(0);
    }
    

    用法

    用法很简单,调用可能如下:

    printFullSequence(5, 2);
    

    输出是:

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

    很酷的是,它是完全动态的。你也可以这样称呼它

    printFullSequence(1, 6);
    

    哪些输出:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-15
      • 2014-05-30
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 2012-12-27
      • 2018-09-06
      相关资源
      最近更新 更多