如何为特定字母分配特定数字?

时间:2018-09-25 18:50:31

标签: java

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

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

到目前为止,这是我所拥有的,但是我不确定是否有更有效的方法来执行此操作或下一步要执行的操作。任何帮助将不胜感激!

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

2 个答案:

答案 0 :(得分:0)

我建议您使用Map。这更具可读性。您只需定义一次就可以使用它。但是比较性能,这没有任何收益。因此,您和我的工作方式都很好,区别在于外观和支持(有人认为使用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));
    }

}

答案 1 :(得分:0)

为了简化可读性,我省略了庞大的switch正文。没什么问题(尽管还有其他方法可以完成同一件事),但这与实际问题并没有真正的联系。

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) 
    {
        // letter = something
    }

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

}

这里的问题是该程序将一直运行到完成为止,并且main()中没有任何内容告诉该程序允许用户输入多个数字。

您有两种选择。一种是您可以一次提示用户输入多个数字(通过将number = scan.nextInt()替换为以下内容:

String input = scan.nextLine();
String[] numbers = input.split(" ");

for (String number : numbers) {
    int asInt = Integer.parseInt(number);

    // your switch logic here, plus printing out the letters
}

另一种选择是重复您的操作,直到用户手动退出程序为止。您可以通过将自己的内容包装在while (true)循环中来实现:

while (true) {
    number = scan.nextInt();

    // Assigns letters to the number variables
    switch (number) 
    {
        // letter = something
    }

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

还有许多其他方法可以做大致相同的事情。重要的概念是在程序中添加某种 loop ,以便代码可以多次执行。