【问题标题】:Print out an ASCII star in java在java中打印出一个ASCII星
【发布时间】:2020-10-22 16:07:13
【问题描述】:

我正在尝试使用for 循环打印出下面的图像。我正在使用for 循环和if 语句在Java 中创建一个ASCII 星号。

我的代码:

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

【问题讨论】:

    标签: java string ascii ascii-art


    【解决方案1】:

    您的代码有效!只需在外循环末尾添加换行符的打印:

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

    结果:

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

    【讨论】:

      【解决方案2】:

      您永远不会输入新行。您应该在外循环中插入一个新行: System.out.print("\n");

      【讨论】:

        【解决方案3】:
        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,几乎像一张照片

        嘿,在 java 中仍然是一个 ASCII 星号:D

        【讨论】:

          【解决方案4】:

          在 "V" for 循环之后和 "R" for 循环内,添加打印行语句以打印出每一行:

          System.out.println();

          【讨论】:

            【解决方案5】:

            您可以使用流中的流代替循环中的循环,如下所示:

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

            输出:

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

            【讨论】:

              【解决方案6】:

              您可以将星星可视化作为平面上的原点,并从-n 迭代到n 以简化您的代码。

              Try it online!

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

              输出:

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

              另见:Making an hourglass using asterisks in java

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2021-06-17
                • 1970-01-01
                • 1970-01-01
                • 2013-04-16
                • 2017-01-26
                • 2016-02-08
                • 1970-01-01
                相关资源
                最近更新 更多