Беда с командным переводчиком - PullRequest
0 голосов
/ 05 апреля 2020

Вечерние ребята, я делаю проект для универа и нахожусь в некоторой суете. У меня проблемы с моим командным переводчиком. Я могу заставить код работать, но, к сожалению, он неправильно читает мой ввод. Может ли кто-нибудь указать мне правильное направление на пути к ошибке? Код следует ниже, игнорируя комментарии и экземпляры других вспомогательных классов. Любая помощь будет оценена. Заранее спасибо!

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

Ответы [ 2 ]

1 голос
/ 05 апреля 2020
  1. break отсутствует в case для HELP. Обратите внимание, что вам не нужно break в последнем case, равном default.
  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!

Не стесняйтесь комментировать в случае каких-либо сомнений / проблем.

1 голос
/ 05 апреля 2020

Все ваши команды в нижнем регистре, но вы переводите пользовательский ввод в верхний регистр. Вместо этого преобразуйте в нижний регистр.

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

Вы также можете добавить break к команде HELP:

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