【问题标题】:Trouble with command intepreter命令解释器有问题
【发布时间】:2020-04-04 23:22:11
【问题描述】:

晚上,伙计们, 我正在为大学做一个项目,我发现自己有点大惊小怪。 我的命令解释器有问题。 我可以让代码运行,但不幸的是它没有正确读取我的输入。 有人可以指出我接近错误的正确方向吗? 代码如下,忽略 cmets 和其他支持类的实例。 任何帮助,将不胜感激。 提前致谢!

import java.util.Scanner;


public class Main {
    //Constantes que definem os comandos
     public static final String REGISTER     = "register";
     public static final String LISTUSERS    = "listusers";
     public static final String UPLOAD       = "upload";
     public static final String READ         = "read";
     public static final String WRITE        = "write";
     public static final String GRANT        = "grant";
     public static final String REVOKE       = "revoke";
     public static final String USERDOCS     = "userdocs";
     public static final String TOPLEAKED    = "topleaked";
     public static final String TOPGRANTERS  = "topgranters";
     public static final String HELP         = "help";
     public static final String EXIT         = "exit";

     //Constantes que definem as mensagens para o utilizador
     public static final String EXIT_COMM           = "Bye!";
     public static final String REGISTER_COMM       = " was registered.";
     public static final String ALREADY_REG_ERROR   = " is already assigned to another user.";
     public static final String NO_LIST_USERS       = "There are no registered users.";
     public static final String DOC_UPLOADED        = " was uploaded.";
     public static final String OFFICIAL_DOC        = "Contact upda1ted.";
     public static final String TOPSECRET_DOC       = "Contact book empty.";
     public static final String CONFIDENTIAL_DOC    = "Phone number does not exist.";
     public static final String CONTACT_SHARE_PHONE = "There are contacts that share phone numbers.";
     public static final String HELP_COMM           = "register - registers a new user /n";

     public static void main(String[] args) {   
         System.out.println("Welcome!");
        //WeKeepSecrets app = new WeKeepSecretsClass();     
        Scanner in  = new Scanner(System.in);
        String comm = getCommand(in);


             while (!comm.equals(EXIT)){
                 switch (comm) {
                 case HELP:
                    System.out.println(HELP);
                 default:
                     System.out.println("ERRO");
                     break;
                 }
                 comm = getCommand(in);
             }
             System.out.println(EXIT_COMM);
             in.close();
     }

     private static String getCommand(Scanner in) {
            String input;

            input = in.nextLine().toUpperCase();
            return input;
        }
}

【问题讨论】:

    标签: java command interpreter


    【解决方案1】:
    1. breakcase 中缺少 HELP。请注意,在最后一个 case 中不需要 break,即 default
    2. case 中的值应该与字符串常量的值匹配,因此,从返回的字符串中删除toUpperCase()
    3. 另外,使用do...while 避免使用comm = getCommand(in); 两次。

    以下是更正后的代码:

    
    import java.util.Scanner;
    
    public class Main {
        // Constantes que definem os comandos
        public static final String REGISTER = "register";
        public static final String LISTUSERS = "listusers";
        public static final String UPLOAD = "upload";
        public static final String READ = "read";
        public static final String WRITE = "write";
        public static final String GRANT = "grant";
        public static final String REVOKE = "revoke";
        public static final String USERDOCS = "userdocs";
        public static final String TOPLEAKED = "topleaked";
        public static final String TOPGRANTERS = "topgranters";
        public static final String HELP = "help";
        public static final String EXIT = "exit";
    
        // Constantes que definem as mensagens para o utilizador
        public static final String EXIT_COMM = "Bye!";
        public static final String REGISTER_COMM = " was registered.";
        public static final String ALREADY_REG_ERROR = " is already assigned to another user.";
        public static final String NO_LIST_USERS = "There are no registered users.";
        public static final String DOC_UPLOADED = " was uploaded.";
        public static final String OFFICIAL_DOC = "Contact upda1ted.";
        public static final String TOPSECRET_DOC = "Contact book empty.";
        public static final String CONFIDENTIAL_DOC = "Phone number does not exist.";
        public static final String CONTACT_SHARE_PHONE = "There are contacts that share phone numbers.";
        public static final String HELP_COMM = "register - registers a new user /n";
    
        public static void main(String[] args) {
            System.out.println("Welcome!");
            // WeKeepSecrets app = new WeKeepSecretsClass();
            Scanner in = new Scanner(System.in);
            String comm;
    
            do {
                System.out.print("Enter command: ");
                comm = getCommand(in);
                switch (comm) {
                case HELP:
                    System.out.println(HELP);
                    break;
                default:
                    if (!comm.equals(EXIT)) {
                        System.out.println("ERRO");
                    }
                }
            } while (!comm.equals(EXIT));
            System.out.println(EXIT_COMM);
        }
    
        private static String getCommand(Scanner in) {
            String input;
            input = in.nextLine();
            return input;
        }
    }
    
    

    示例运行:

    Welcome!
    Enter command: help
    help
    Enter command: abc
    ERRO
    Enter command: exit
    Bye!
    

    如有任何疑问/问题,请随时发表评论。

    【讨论】:

    • 非常感谢您的解释,我在我的机器上运行了它,它运行良好。
    【解决方案2】:

    您的命令都是小写的,但是您正在将用户输入转换为大写。改为小写。

    input = in.nextLine().toLowerCase();
    

    您可能还想将break 添加到 HELP 命令中:

                 case HELP:
                    System.out.println(HELP);
                    break;
    

    【讨论】:

    • 非常感谢您指出!下次我会注意的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多