命令解释器有问题

问题描述 投票:0回答:2

晚上,我正在为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;
        }
}
java command interpreter
2个回答
0
投票

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

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

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

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

0
投票
  1. break中的case中缺少[HELP
  2. 大小写应与字符串常量的值匹配,因此,从返回的字符串中删除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!

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

© www.soinside.com 2019 - 2024. All rights reserved.