1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[Java] Duvida Enum

Discussão em 'Programação' iniciada por TheRunner, 8 de Dezembro de 2008. (Respostas: 3; Visualizações: 970)

  1. TheRunner

    TheRunner Power Member

    Boas

    Eu tenho uma classe enum com diversas opções e numa outra classe peço ao utilizador para inserir uma opção. Através do código em baixo verifico qual é a opção e uso um switch..case para correr a opção escolhida pelo utilizador.

    A minha duvida prende-se com a verificação da opção introduzida pelo utilizador pertence ou não à classe enum Opcao, pois quando este digita outra coisa qualquer que não uma opção válida o programa rebenta a dizer que o que foi introduzido não pertente à classe Opcao. Queria conseguir fazer esta verificação e simplesmente fazer um 'print' de erro e deixar o utilizador escolher outra opção.

    Já estou farto de pesquisar e não consigo nada. Ninguém me pode ajudar? A api do java não tem solução para isto?

    Se me conseguissem ajudar agradecia !:)

    Cumps
     
  2. Baderous

    Baderous Banido

    A maneira que encontrei de resolver isso foi criar um EnumSet com as diversas Opcoes disponíveis e, de seguida, criar um HashSet com as Strings correspondentes a essas opções. Depois bastou-me testar sucessivamente os inputs lidos até que a String correspondente à opção digitada pelo utilizador estivesse presente no tal HashSet<String>, o que me garantia que estava presente no conjunto de Opcoes disponíveis. Só no fim, quando já tinha a certeza que a opção estava correcta, é que associava o valor da String lida à variável do tipo enumerado. Apenas acrescentei um tratamento de Strings de modo a que a String inserida pelo utilizador correspondesse à forma literal da possível opção.

    Código:
    public class Main {
        /**Método que faz o tratamento da string recebida, colocando o 1º caracter em letra maiúscula e os restantes em minúscula*/
        private static String trataString(String f) {
            StringBuilder aux = new StringBuilder(f.toLowerCase());
            if (!(f.equals(null)) && !(f.equals(""))) {
                char c = f.charAt(0);
                if (c>='a' && c<='z')
                    c = (char)('A'+c-'a');
                aux.setCharAt(0,c);
            }
            return aux.toString();  
        }
    
        public static void main(String[] args) {
            Scanner leitor = new Scanner(System.in);
            Opcao opcao;
            String input;
            EnumSet<Opcao> opcoes = EnumSet.allOf(Opcao.class);
            HashSet<String> opStr = new HashSet<String>(); 
            for (Opcao op : opcoes)
                opStr.add(op.name());
            do {
                System.out.println("Opcao: ");
                input = leitor.next();
            } while (!opStr.contains(trataString(input)));
            opcao = Opcao.valueOf(input);
            System.out.println("Opcao escolhida: " + opcao.name());
            }
        }
     
  3. AliFromCairo

    AliFromCairo Power Member

    Podes sempre apanhar a excepção que é lançada.
     
  4. TheRunner

    TheRunner Power Member

    Sim já pensei nisso mas o programa não vai abaixo à mesma? É que eu queria que o utilizador a seguir pudesse digitar outra opção...

    Baderous obrigado pela ajuda. Vou experimentar a tua solução ;)
     

Partilhar esta Página