题解 | #配置文件恢复#字典+分支处理
配置文件恢复
https://www.nowcoder.com/practice/ca6ac6ef9538419abf6f883f7d6f6ee5
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//字典存储指令-结果
HashMap<String,String> map=new HashMap<>();
String[] opra=new String[]{"reset","reset board","board add","board delete","reboot backplane","backplane abort"};
String unknow="unknown command";
map.put("reset","reset what");
map.put("reset board","board fault");
map.put("board add","where to add");
map.put("board delete","no board at all");
map.put("reboot backplane","impossible");
map.put("backplane abort","install first");
while(in.hasNextLine()){
String order=in.nextLine();
//先检查是否是完整的命令,如果是,直接输出操作结果
if(map.containsKey(order)){
System.out.println(map.get(order));
}else{
//再看是否是单一指令,单字串指令只有一条,很好辨别
String[] t=order.split(" ");
if(t.length==1){
if(suit(opra[0],t[0])) {
System.out.println(map.get(opra[0]));
}else{
System.out.println(unknow);
}
//再处理长度为2的操作指令:遍历指令进行匹配(首字母开始)
}else if(t.length==2){
ArrayList<String> result=new ArrayList<>();
for(int i=1;i<opra.length;i++){
String[] order_words=opra[i].split(" ");
if(suit(order_words[0],t[0]) && suit(order_words[1],t[1])){
result.add(map.get(opra[i]));
}
}
//未匹配的活着匹配不止一个的也是非法指令
if(result.size()==0 || result.size()>1){
System.out.println(unknow);
}else{
System.out.println(result.get(0));
}
//其他长度都为非法指令
}else{
System.out.println(unknow);
}
}
}
}
public static boolean suit(String opra,String str){
for(int i=0;i<str.length();i++){
if(str.charAt(i)!=opra.charAt(i)){
return false;
}
}
return true;
}
}
不需要很新颖的技术,但是需要对题目的大量信息表示的逻辑分支一条条处理



查看8道真题和解析