题解 | #配置文件恢复#字典+分支处理

配置文件恢复

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;
     }
}

不需要很新颖的技术,但是需要对题目的大量信息表示的逻辑分支一条条处理

全部评论

相关推荐

喜欢走神的孤勇者练习时长两年半:池是池,发是发,我曾池,我现黑
点赞 评论 收藏
分享
10-25 12:05
已编辑
湖南科技大学 Java
若梦难了:我有你这简历,已经大厂乱杀了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务