Распечатайте звезду ASCII в java

Я пытаюсь распечатать изображение ниже, используя цикл for. Я использую циклы for и операторы if для создания звезды ASCII в Java.

введите здесь описание изображения

Мой код:

public class asciistar {
    public static void main(String[] args) {
        final int X = 9;
        for (int R = 0; R < X; R++) {
            for (int V = 0; V < X; V++) {
                if (R == V || R + V == X - 1 || V == X / 2 || R == X / 2) {
                    System.out.print("* ");
                } else {
                    System.out.print("  ");
                }
            }
        }
    }
}

person Jack Meng    schedule 22.10.2020    source источник


Ответы (6)


Ваш код работает! Просто добавьте печать новой строки в конце внешнего цикла:

public static void main(String[] args) {
    final int X = 9;
    for (int R = 0; R < X; R++) {
        for (int V = 0; V < X; V++) {
            if (R == V || R + V == X - 1 || V == X / 2 || R == X / 2) {
                System.out.print("* ");
            } else {
                System.out.print("  ");
            }
        }
        System.out.println("");
    }
}

Результат:

*       *       * 
  *     *     *   
    *   *   *     
      * * *       
* * * * * * * * * 
      * * *       
    *   *   *     
  *     *     *   
*       *       * 
person CryptoFool    schedule 22.10.2020

Вы никогда не вводите новую строку. Вы должны вставить новую строку во внешний цикл: System.out.print("\n");

person Thomas    schedule 22.10.2020

public Cheater() 
{
   EventQueue.invokeLater(new Runnable() 
   {
     @Override
      public void run() 
      {
        try 
        {
          UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
          String path = "https://i.stack.imgur.com/xUAW1.png";
          URL url = new URL(path);
          BufferedImage image = ImageIO.read(url);
          JLabel label = new JLabel(new ImageIcon(image));
          JFrame f = new JFrame();
          f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          f.getContentPane().add(label);
          f.pack();
          f.setLocation(200, 200);
          f.setVisible(true);
         } catch (Exception exp) { exp.printStackTrace();}
       }
    });
 }

Вывод:

введите здесь описание изображения

4K, почти как картинка

привет, все еще звезда ASCII в java : D

person aran    schedule 29.01.2021

После цикла V for и внутри цикла R for добавьте оператор print line для вывода каждой строки:

System.out.println();

person Thomas M    schedule 22.10.2020

Вы можете использовать поток в потоке вместо цикл в цикле следующим образом:

int m = 9;
IntStream.range(0, m).forEach(i -> {
    IntStream.range(0, m).forEach(j -> {
        if (i == j || i + j == m - 1 || i == m / 2 || j == m / 2) {
            System.out.print("* ");
        } else {
            System.out.print("  ");
        }
    });
    System.out.println();
});

Выход:

*       *       * 
  *     *     *   
    *   *   *     
      * * *       
* * * * * * * * * 
      * * *       
    *   *   *     
  *     *     *   
*       *       * 
person Community    schedule 29.01.2021

Вы можете визуализировать звезду как начало координат на плоскости и выполнять итерации от -n до n, чтобы упростить код.

Попробуйте онлайн!

int m = 5;
IntStream.rangeClosed(-m, m)
        .map(Math::abs)
        .peek(i -> IntStream.rangeClosed(-m, m)
                .map(Math::abs)
                .mapToObj(j -> i == 0 || j == 0
                        || i == j ? "* " : "  ")
                .forEach(System.out::print))
        .forEach(i -> System.out.println());

Выход:

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

См. также: Создание песочных часов с помощью звездочек в Java

person Community    schedule 25.03.2021