【问题标题】:How to type a string using * chars?如何使用 * 字符键入字符串?
【发布时间】:2018-09-29 14:34:22
【问题描述】:

我被设置为打印一串输入字母 Б О Б,只使用“*”字符。我的 Java 老师希望看到以下输出:

创建public class Letter 并使用矩阵仅编码两个字母很容易。但是我遇到了制作整个字母表的问题(这是一项额外的任务)。

也许还有另一种方法可以将输入字符串转换为“*”的图片?

【问题讨论】:

  • 欢迎来到 Stack Overflow!您的问题是too broad。这不是家庭作业完成服务。你的老师给了你这个作业,你需要先自己做一些努力。如果您甚至无法开始,请向您的老师寻求帮助。将您的问题隔离到特定的编程 sn-ps 中,然后搜索答案。如果您需要课程或教程,Stack Overflow 不适合问它。我们祝您学习顺利。请参阅:Help Center
  • 欢迎来到 Stack Overflow!请拿起tour,环顾四周,通读help center,尤其是How do I ask a good question? 分配通常不是任意的;您的讲师、教程或课程将涵盖使您能够做到这一点的必要主题。 查看您的课程资料、课堂笔记等并试一试。 如果您遇到特定问题,请彻底研究它,search thoroughly here,如果您仍然遇到问题,请发布您的代码和问题描述。人们会很乐意提供帮助。
  • 你应该为每个字母创建一个类,每个类/字母都有自己的循环,检查这个wikihow.com/Use-Java-to-Display-Letters-with-Asterisks
  • 除了为所有字母创建Letter 之外,您为什么认为您必须做任何其他事情?这会很耗时,而且不会比写两封信更能提供信息,但仅此而已。

标签: java oop char ascii ascii-art


【解决方案1】:

我会这样写:

import java.util.*;
import java.util.stream.*;

public class Alphabet {

    enum Letters {
        A(
                "   *   ",
                "  * *  ",
                " *   * ",
                "*     *",
                "*******",
                "*     *",
                "*     *"
        ),
        B(
                "*****  ",
                "*     *",
                "*     *",
                "*****  ",
                "*     *",
                "*     *",
                "*****  "
        ),
        C(
                " ***** ",
                "*     *",
                "*      ",
                "*      ",
                "*      ",
                "*     *",
                " ***** "
        ),
        None(
                "*******",
                "*******",
                "*******",
                "*******",
                "*******",
                "*******",
                "*******"
        );

        List<String> bitmap;

        Letters(String... bmp) {
            bitmap = Arrays.asList(bmp);
        }

        List<String> strings() {
            return bitmap;
        }
    }

    private final String SPACE = " ";
    private final String origin;
    private final Map<Character, Letters> bitmaps =
            Stream.of(Letters.values())
            .filter(l -> !l.equals(Letters.None))
            .collect(Collectors.toMap(
                    letters -> letters.toString().charAt(0),
                    letters -> letters
            ));

    public Alphabet(String abc) {
        this.origin = abc;
    }

    List<String> data() {
        List<List<String>> word = origin.chars()
                .mapToObj(c -> bitmaps.getOrDefault((char) c, Letters.None).strings())
                .collect(Collectors.toList());

        return IntStream.range(0, word.get(0).size())
                .mapToObj(idx -> word.stream().map(strings -> strings.get(idx)).collect(Collectors.joining(SPACE)))
                .collect(Collectors.toList());
    }

    void print() {
        List<String> bitmap = data();
        bitmap.forEach(System.out::println);
    }

    public static void main(String[] args) {
        new Alphabet(" ABCBA ").print();
    }

}

花时间尝试了解它的工作原理。 输出将是:

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

但是有一个想法。 你应该发明一些算法来为每个字符创建一个位图。

【讨论】:

  • 感谢您的时间和关注)我会检查它
【解决方案2】:

这是我将数字(0 到 9)转换为 char * 的方法,如您的示例:

class JavaApplication57 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ArrayList<Letter> ar = new ArrayList<>();
        System.out.println("Please input string: ");
        String s = sc.next();
        for (char c : s.toCharArray()) {
            ar.add(JavaApplication57.convertToLetter(c));
        }
        for (int i = 0; i < 5; i++) {
            for (Letter l : ar) {
                System.out.print(l.getLine(i) + " ");
            }
            System.out.println("");
        }
    }

    static Letter convertToLetter(char ch) {
        String a = "****",
                b = "*  *",
                c = "   *",
                c2 = "*",
                d = "*   ",
                e = "* * ",
                f = "  * ";

        switch (ch) {
            case '0':
                return new Letter(a, b, b, b, a);
            case '1':
                return new Letter(c2, c2, c2, c2, c2);
            case '2':
                return new Letter(a, c, a, d, a);
            case '3':
                return new Letter(a, c, a, c, a);
            case '4':
                return new Letter(d, e, a, f, f);
            case '5':
                return new Letter(a, d, a, c, a);
            case '6':
                return new Letter(a, d, a, b, a);
            case '7':
                return new Letter(a, c, c, c, c);
            case '8':
                return new Letter(a, b, a, b, a);
            case '9':
                return new Letter(a, b, b, c, a);

        }
        return null;
    }

}

class Letter {

    private String line1, line2, line3, line4, line5;

    public Letter(String line1, String line2, String line3, String line4, String line5) {
        this.line1 = line1;
        this.line2 = line2;
        this.line3 = line3;
        this.line4 = line4;
        this.line5 = line5;
    }

    public String getLine(int i) {
        switch (i) {
            case 0:
                return line1;
            case 1:
                return line2;
            case 2:
                return line3;
            case 3:
                return line4;
            case 4:
                return line5;
            default:
                throw new AssertionError();
        }

    }
}

希望对您有所帮助

【讨论】:

  • 感谢您的关注和花费的时间,Lê Đình Bảo Tín,很遗憾我只是 Java 的初学者。您能否解释一下您的代码是如何工作的(不是在 cmets 中,而是在其他地方)?
  • 是的,我认为您不是初学者。简单来说,你可以这样想:-class Letter:定义一个字母,
  • -函数 convertToLetter 用于将字符转换为与您的示例相同的字母。 -Main:我有一个包含所有字母的数组列表,然后我通过行打印字母。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
  • 2013-07-16
  • 1970-01-01
  • 2019-06-15
  • 1970-01-01
相关资源
最近更新 更多