Java编程题,求解
// 上源码
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Test {
/**
* 数字键 0-9键 *键 #键
*/
private static String[][] digits = new String[][]{
// 0
{},
// 1
{},
// 2
{"A", "B", "C"},
// 3
{"D", "E", "F"},
// 4
{"G", "H", "I"},
// 5
{"J", "K", "L"},
// 6
{"M", "N", "O"},
// 7
{"P", "Q", "R", "S"},
// 8
{"T", "U", "V"},
// 9
{"W", "X", "Y", "Z"},
// *
{},
// #
{},
};
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String inputs;
String[] arr;
System.out.print("请输入按键数字(多个数字空格隔开):");
while (null != (inputs = scanner.nextLine())) {
if ("exit".equalsIgnoreCase(inputs) || "quit".equalsIgnoreCase(inputs)) {
System.out.println("退出程序");
System.exit(1);
}
// 检查args输入参数是否合法
if (checkInput(inputs.split(" "))) {
arr = inputs.trim().split(" ");
// 查找输入键的所有字母组合
List<String[]> inputCharList = new ArrayList<>();
for (String digit : arr) {
// *#01没有字母
if ("*#01".indexOf(digit) >= 0) {
continue;
}
inputCharList.add(digits[Integer.parseInt(digit)]);
}
if (!inputCharList.isEmpty()) {
combineChars("", inputCharList);
System.out.println();
} else {
System.out.println("输入的数字没有字母组合。");
}
} else {
System.out.println("按键输入不正确,请输入0-9 * #键。");
}
System.out.print("请输入按键数字(多个数字空格隔开):");
}
}
/**
* 递归查找所有字母组合
* @param headerChar
* @param inputCharList
*/
private static void combineChars(String headerChar, List<String[]> inputCharList) {
if (inputCharList.size() == 1) {
for (String ch : inputCharList.get(0)) {
System.out.print(headerChar + ch + " ");
}
} else {
for (String ch : inputCharList.get(0)) {
combineChars(headerChar + ch, inputCharList.subList(1, inputCharList.size()));
}
}
}
/**
* 校验输入是否合法
*
* @param args
* @return
*/
static boolean checkInput(String[] args) {
String validInputs = "0123456789*#";
boolean isValid = true;
for (String arg : args) {
if (arg.length() != 1 || validInputs.indexOf(arg) < 0) {
isValid = false;
break;
}
}
return isValid;
}
}
运行效果
题目里只说了输入两个数字的情况,输入* # 1 0这里我直接视为无效输入了(忽略掉了),对于输入超过两个数字以上的情况也能按要求输出。(考虑到输入的数字个数不确定因素,这里用到了递归,如果确定只有1或2个数字输入,代码会简介很多,也不需要递归)