命令解释器的问题

Trouble with command intepreter

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

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

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

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

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

             case HELP:
                System.out.println(HELP);
                break;
    HELPcase 中缺少
  1. break。请注意,最后一个 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!

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