带“ *”的Java绘图形状

时间:2018-07-02 15:40:46

标签: java

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

我多次使用jcenter()来获得形状,但是我只是想看看是否有更简洁的方法来创建形状。我用此代码确定了形状,但是如果有人有其他方法可以这样做,请告诉我!

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.3'


        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

2 个答案:

答案 0 :(得分:3)

所以我认为您想要在输出控制台中使用

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

那为什么不在控制台中创建静态函数和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

输出:

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

答案 1 :(得分:1)

说明

这里重复两件事:

******
*    *

其余代码仅根据您模式的前缀向右移动模式的总体逻辑来调整或回到左侧。


基本

因此,我们首先创建两个方法和一个小的辅助方法:

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

哪个输出:

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