java - 如何将特定数字分配给特定字母?
问题描述
我是 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
解决方案
我提供给你使用Map
。这更具可读性。您只需定义一次并每次都使用它。但是就性能而言,这并没有带来任何利润。因此,您和我的 apporahc 工作正常,区别在于视觉和支持(有人认为使用if...else
而switch
不是真正的 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));
}
}
推荐阅读
- airflow - Apache Airflow: rerun for tasks with date parameters
- sql - 对于所有评论者对,使得两位评论者都给同一部电影评分,返回两位评论者的姓名
- php - DocuSign API update envelope notification settings
- selenium - How do I make my selenium tests detectable by the server?
- excel - 使用 EXCEL vba 下载文件的问题
- bash - 如何在shell中获取字符串的第二个单词?
- django - 带有 Django 模板的 Django REST Api?
- excel - 在 VBA 的函数中引用另一个工作表中的单元格
- ios - iOS 12 自动填充密码存储到错误的关联域
- javascript - 如果不先使用开发人员工具选择 iframe DOM 元素,则无法访问它