题解 | #配置文件恢复#字典+分支处理
配置文件恢复
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; } }
不需要很新颖的技术,但是需要对题目的大量信息表示的逻辑分支一条条处理