首页 > 解决方案 > 如何将特定数字分配给特定字母?

问题描述

我是 Java 的超级新手,在课堂上还没有学到很多东西,但我正在尝试编写一个程序,将数字转换为字母,然后将转换输出到控制台。我有需要分配给字母的特定数字,所以我不能使用 Java 默认数字。到目前为止,我使用 switch 语句来分配数字,但它只允许我一次输入一个,然后我必须再次运行程序。我希望能够在得到答案之前输入一系列数字。例如,在我的情况下,“A”= 21“C”= 23“D”= 31 等,所以不一定有模式。

本质上我只是想知道是否可以输入一系列特定数字(例如:42 32 93)并获得相应的输出(嘿)

这是我到目前为止所拥有的,但我不确定是否有更有效的方法来做到这一点或下一步该做什么。任何帮助是极大的赞赏!

import java.util.Scanner;

public class NumbersToLetters 
{

    public static void main(String[] args) 
    {
        // Declaration section                
        Scanner scan = new Scanner(System.in);
        int number = 0;
        char letter = 0;

        // Prompts the user for input
        System.out.println("Enter the numbers: ");

        number = scan.nextInt();

        // Assigns letters to the number variables
        switch (number) 
        {
            case 21:
                letter = 'A';
                break;
            case 22:
                letter = 'B';
                break;
            case 23:
                letter = 'C';
                break;
            case 31:
                letter = 'D';
                break;
            case 32:
                letter = 'E';
                break;
            case 33:
                letter = 'F';
                break;
            case 41:
                letter = 'G';
                break;
            case 42:
                letter = 'H';
                break;
            case 43:
                letter = 'I';
                break;
            case 51:
                letter = 'J';
                break;
            case 52:
                letter = 'K';
                break;
            case 53:
                letter = 'L';
                break;
            case 61:
                letter = 'M';
                break;
            case 62:
                letter = 'N';
                break;
            case 63:
                letter = 'O';
                break;
            case 71:
                letter = 'P';
                break;
            case 72:
                letter = 'Q';
                break;
            case 73:
                letter = 'R';
                break;
            case 74:
                letter = 'S';
                break;
            case 81:
                letter = 'T';
                break;
            case 82:
                letter = 'U';
                break;
            case 83:
                letter = 'V';
                break;
            case 91:
                letter = 'W';
                break;
            case 92:
                letter = 'X';
                break;
            case 93:
                letter = 'Y';
                break;
            case 94:
                letter = 'Z';
                break;
            default: System.out.println("Enter a valid value");

        } // END OF switch()

        System.out.print(letter);
        System.out.println();

    } // END OF main() method

} // END OF DRIVER CLASS

标签: java

解决方案


我提供给你使用Map。这更具可读性。您只需定义一次并每次都使用它。但是就性能而言,这并没有带来任何利润。因此,您和我的 apporahc 工作正常,区别在于视觉和支持(有人认为使用if...elseswitch不是真正的 OOP :-))。

public final class NumbersToLetters implements Function<Integer, Character> {

    private static final Map<Integer, Character> MAP = new HashMap<>();

    static {
        MAP.put(21, 'A');
        MAP.put(22, 'B');
        MAP.put(23, 'C');
        MAP.put(31, 'D');
        MAP.put(32, 'E');
        MAP.put(33, 'F');
        MAP.put(41, 'G');
        MAP.put(42, 'H');
        MAP.put(43, 'I');
        MAP.put(51, 'J');
        MAP.put(52, 'K');
        MAP.put(53, 'L');
        MAP.put(61, 'M');
        MAP.put(62, 'N');
        MAP.put(63, 'O');
        MAP.put(71, 'P');
        MAP.put(72, 'Q');
        MAP.put(73, 'R');
        MAP.put(74, 'S');
        MAP.put(81, 'T');
        MAP.put(82, 'U');
        MAP.put(83, 'V');
        MAP.put(91, 'W');
        MAP.put(92, 'X');
        MAP.put(93, 'Y');
        MAP.put(94, 'Z');
    }

    @Override
    public Character apply(Integer num) {
        return MAP.getOrDefault(num, '\0');
    }

    public static void main(String... args) {
        Function<Integer, Character> numberToLetter = new NumbersToLetters();

        System.out.println(numberToLetter.apply(42));
        System.out.println(numberToLetter.apply(32));
        System.out.println(numberToLetter.apply(93));
    }

}

推荐阅读