【问题标题】:Need to take in a char and print out its shape in asterisks java需要接受一个字符并在星号java中打印出它的形状
【发布时间】:2016-02-08 16:40:11
【问题描述】:

我必须制作一个程序,让用户输入 3 个字母,然后程序以星号将其打印出来。 EX 1 个字母: http://imgur.com/oPPO0Bs 显然我可以用字母表中每个字符的形状制作一个数组,但我想知道是否有更简单的方法来做一些链接。是否有某种方法可以获取一个字符和一个符号并打印出该符号中字符的形状。

【问题讨论】:

  • 嗯……是的,不是的。您可以包含 FreeType(或者,在 Windows 上,将字符绘制到位图中),但这听起来确实超出了您的要求。与其自己创建位图数组,不如在网上搜索预制列表。当然,没有办法完全按照你的任务写的!

标签: java


【解决方案1】:

这是一个巧妙的解决方案,使用旧的 AWT 在 Comic Sans 中呈现您的文本,以供欢笑:

import static java.awt.image.BufferedImage.*;
import java.awt.*;
import java.awt.image.*;
import java.io.*;

public class ASCIIRenderer {
    public static void main(String[] args) throws IOException {
        try (BufferedReader reader = new BufferedReader(
                new InputStreamReader(System.in))) {
            String text = null;
            while ((text = reader.readLine()) != null) {
                // Dummy image to calculate bitmap width / height of your text
                BufferedImage img = new BufferedImage(1, 1, TYPE_INT_ARGB);
                Graphics2D g2d = img.createGraphics();
                Font font = new Font("Comic Sans MS", Font.PLAIN, 24);
                g2d.setFont(font);
                FontMetrics fm = g2d.getFontMetrics();
                int width = fm.stringWidth(text);
                int height = fm.getHeight();
                g2d.dispose();
                // Real image
                img = new BufferedImage(width, height, TYPE_INT_ARGB);
                g2d = img.createGraphics();
                g2d.setFont(font);
                fm = g2d.getFontMetrics();
                g2d.drawString(text, 0, fm.getAscent());
                g2d.dispose();
                for (int y = 0; y < img.getHeight(); y++) {
                    for (int x = 0; x < img.getWidth(); x++) {
                        System.out.print(0 == img.getRGB(x, y) ? "  " : "**");
                    }
                    System.out.println();
                }
            }
        }
    }
}

(credits to most of the above code go to MadProgrammer)

运行它,输入类似ABC 的内容并得到:

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

【讨论】:

  • 这真是太棒了。加一为努力和速度。
【解决方案2】:

没有简单的方法可以做到这一点。 char 没有形状。 char 只是一个介于 065535 之间的数字,当您打印它时,它恰好显示为单个字符。

您必须为字母表中的每个字母设计自己的模式,使用数组是最简单的方法。

【讨论】:

  • 是的,我想我必须这样做,我知道我可以那样做,只是乏味。
  • @AnatoliySokolov 我同意这很乏味。我很想用 5 个字母来证明你能做到,然后告诉你的教授你很无聊。
  • @PaulBoddington 完全矫枉过正。用户只输入3个字母,为什么要输入5个呢?你想加分,让我们其他人看起来很糟糕吗? OP 已经设计了D,所以设计一个A,并显示它可以打印DAD,或者可能是ADD,这就是你停在那里的原因。大声笑(哎呀,还不能打印)
猜你喜欢
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 2018-07-19
  • 1970-01-01
相关资源
最近更新 更多