Java编程题,求解

 我来答
旁明煦0IB
2021-02-07 · TA获得超过352个赞
知道小有建树答主
回答量:245
采纳率:100%
帮助的人:98.2万
展开全部

// 上源码

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个数字输入,代码会简介很多,也不需要递归)

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阳光的雷咩咩
2021-02-04 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7663万
展开全部
只需要控制台的吧,不需要gui界面?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式