lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1. 题目

读题

 HJ66 配置文件恢复

 

考查点

 

2. 解法

思路

 

代码逻辑

 

具体实现

代码的主要步骤如下:

  • 首先,定义一个Map对象,使用HashMap类来创建,将配置命令作为键,将执行结果作为值,存储在Map中。
  • 然后,定义一个方法,用来判断输入的字符串是否能唯一匹配一个配置命令,并返回匹配的结果或者"unknown command"。
  • 接着,使用Scanner类来读取用户的输入,并调用判断方法,输出相应的结果。
  • 最后,关闭Scanner对象。

代码如下:

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {

    // 配置命令的Map
    public static final Map<String, String> commands = new HashMap<>();

    // 初始化Map,将配置命令和执行结果存储在Map中
    static {
        commands.put("reset", "reset what");
        commands.put("reset board", "board fault");
        commands.put("board add", "where to add");
        commands.put("board delete", "no board at all");
        commands.put("reboot backplane", "impossible");
        commands.put("backplane abort", "install first");
    }

    // 判断输入的字符串是否能唯一匹配一个配置命令,并返回匹配的结果或者"unknown command"
    public static String matchCommand(String input) {
        // 如果输入为空,直接返回"unknown command"
        if (input == null || input.isEmpty()) {
            return "unknown command";
        }
        // 将输入的字符串按空格分割成单词数组
        String[] words = input.split(" ");
        // 如果单词数组的长度大于2,说明输入不合法,直接返回"unknown command"
        if (words.length > 2) {
            return "unknown command";
        }
        // 定义一个变量,用来记录匹配成功的次数
        int count = 0;
        // 定义一个变量,用来记录匹配成功的命令
        String match = null;
        // 遍历Map中的所有键值对,逐个比较
        for (Map.Entry<String, String> entry : commands.entrySet()) {
            // 获取当前键值对的键和值
            String key = entry.getKey();
            String value = entry.getValue();
            // 将当前键按空格分割成单词数组
            String[] cmd = key.split(" ");
            // 如果单词数组的长度和输入的单词数组的长度相同,才有可能匹配成功
            if (cmd.length == words.length) {
                // 定义一个标志变量,用来记录当前键是否匹配成功
                boolean flag = true;
                // 遍历单词数组,逐个比较
                for (int i = 0; i < words.length; i++) {
                    // 如果当前单词不是当前键单词的前缀,说明匹配失败,将标志变量设为false,并跳出循环
                    if (!cmd[i].startsWith(words[i])) {
                        flag = false;
                        break;
                    }
                }
                // 如果标志变量为true,说明匹配成功,将匹配次数加一,并记录当前键和值
                if (flag) {
                    count++;
                    match = value;
                }
            }
        }
        // 如果匹配次数为1,说明唯一匹配成功,返回对应键的值
        if (count == 1) {
            return match;
        } else {
            // 否则,说明没有匹配或者多次匹配,返回"unknown command"
            return "unknown command";
        }
    }

    public static void main(String[] args) {
        // 创建Scanner对象,用来读取用户的输入
        Scanner sc = new Scanner(System.in);
        // 循环读取用户的输入,直到遇到空行或者结束符
        while (sc.hasNextLine()) {
            // 读取一行输入,并去掉首尾空格
            String input = sc.nextLine().trim();
            // 调用判断方法,并输出结果
            System.out.println(matchCommand(input));
        }
        // 关闭Scanner对象
        sc.close();
    }
}

 

3. 总结

posted on 2023-07-27 16:47  白露~  阅读(143)  评论(0编辑  收藏  举报