Compare an integer entered with each enum value

1

Hello.

I want to check if the option that the user entered matches an option in the menu. I am using enum to show the options and the user types a corresponding number. But I can not. Let's look at the menu enum and the class I'm testing.

package dominio;  

public enum EnumMenuInicial {  

    CADASTRAR(1), PESQUISAR(2), EXCLUIR(3);  

    public final int OPCAO;  

    private EnumMenuInicial(int opcaoEscolhida) {  
        EnumMenuInicial.OPCAO = opcaoEscolhida;  
    }  

} 

import java.util.ArrayList;  
import java.util.Scanner;  
import dominio.EnumMenuInicial;  

public class Clinica {  

    private static Scanner entrada = new Scanner(System.in);  
    private static ArrayList<Cliente> clientes = new ArrayList<>();  

    public static void main(String args[]) {  
        Clinica.exibirMenuInicial();  
        int opcao = Clinica.readInt();  

}  

    private static boolean cadastrar() {  
        System.out.println("Informe o nome");  
        String nome = entrada.nextLine();  

        System.out.println("Informe CPF");  
        int cpf = Clinica.readInt();  

        System.out.println("Informe telefone");  
        int telefone = Clinica.readInt();  

        System.out.println("Informe o estado");  
        String estado = entrada.nextLine();  

        System.out.println("Informe a cidade");  
        String cidade = entrada.nextLine();  

        Cliente cliente = new Cliente(nome, cpf, telefone, estado, cidade);  

        boolean inserido = Clinica.clientes.add(cliente);  

        return inserido;  
    }  

//limpar buffer  
    private static int readInt() {  
        int numero = entrada.nextInt();  
        entrada.nextLine();  
        return numero;  
    }  

    private static void exibirMenuInicial() {  
        int i = 1;  

        System.out.println("Escolha uma opção:");  

        for (EnumMenuInicial opcao : EnumMenuInicial.values()) {  
            System.out.println(i + ": " + opcao.toString());  
            i++;  
        }  
    }  

    private static boolean validarOpcao(int opcaoEscolhida) {  
        int i = 0;  
        for (EnumMenuInicial opcao : EnumMenuInicial.values()) {  
            if (opcaoEscolhida == OPCAO) {  

    return true;            }  
        }  
}  

    return false;  
    }  

}  

On line:

            if (opcaoEscolhida == OPCAO) {   

give the error:

  

OPCAO can not be resolved to a variable Clinica.java / clinica / src line 61 Java Problem >

If I switch to:

            if (opcaoEscolhida == EnumMenuInicial.OPCAO) {   

Give the error:

  

Can not make a static reference to the non-static field EnumMenuInicial.OPCAO Clinica.java / clinica / src line 63 Java Problem >

How can I fix this?

    
asked by anonymous 19.05.2016 / 18:38

3 answers

1

An alternative would be to check all enum options using foreach :

public enum EnumMenuInicial {

    CADASTRAR(1), PESQUISAR(2), EXCLUIR(3);

    private int opcao;

    private EnumMenuInicial(int opcaoEscolhida) {
        opcao = opcaoEscolhida;
    }

    public int getOpcao() {
        return opcao;
    }

    public static EnumMenuInicial procurarOpcao(int id) {
        for(EnumMenuInicial e : values()) {
            if (e.getOpcao() == id)
                return e;
        }
        return null;
    }

}

So, just check using this procurarOpcao method by passing user input:

EnumMenuInicial opcao = EnumMenuInicial.prucurarOpcao(Integer.parseInt("3"));
if (opcao != null) {
    //Opcao é válida...
} else {
    //Opcao inválida...
}
    
19.05.2016 / 20:24
0

Correct. Where is it:

        if (opcaoEscolhida == OPCAO) {  

I put:

        if (opcaoEscolhida == opcao.OPCAO) {  

The code presented in the now corrected question was:

package domain;

public enum EnumMenuInitial {

CADASTRAR(1), PESQUISAR(2), EXCLUIR(3);  

public final int OPCAO;  

private EnumMenuInicial(int opcaoEscolhida) {  
    EnumMenuInicial.OPCAO = opcaoEscolhida;  
}  

}

import java.util.ArrayList;
import java.util.Scanner;
import domain.EnumMenuInitial;

public class Clinic {

private static Scanner entrada = new Scanner(System.in);  
private static ArrayList<Cliente> clientes = new ArrayList<>();  

public static void main(String args[]) {  
    Clinica.exibirMenuInicial();  
    int opcao = Clinica.readInt();  

}

private static boolean cadastrar() {  
    System.out.println("Informe o nome");  
    String nome = entrada.nextLine();  

    System.out.println("Informe CPF");  
    int cpf = Clinica.readInt();  

    System.out.println("Informe telefone");  
    int telefone = Clinica.readInt();  

    System.out.println("Informe o estado");  
    String estado = entrada.nextLine();  

    System.out.println("Informe a cidade");  
    String cidade = entrada.nextLine();  

    Cliente cliente = new Cliente(nome, cpf, telefone, estado, cidade);  

    boolean inserido = Clinica.clientes.add(cliente);  

    return inserido;  
}  

// clean buffer
    private static int readInt () {
        int numero = entrada.nextInt ();
        entry.nextLine ();
        return number;
    }

private static void exibirMenuInicial() {  
    int i = 1;  

    System.out.println("Escolha uma opção:");  

    for (EnumMenuInicial opcao : EnumMenuInicial.values()) {  
        System.out.println(i + ": " + opcao.toString());  
        i++;  
    }  
}  

private static boolean validarOpcao(int opcaoEscolhida) {  
    int i = 0;  
    for (EnumMenuInicial opcao : EnumMenuInicial.values()) {  
        if (opcaoEscolhida == opcao.OPCAO) {  

return true;            }  
    }  

}

return false;  
}  

}

    
19.05.2016 / 19:15
0
  • I suggest changing your enum, you are using the class reference to change a variable final which is not correct, use this for this.
  • Add methods to your enum to make your work easier.
  • I suggest the following change, there are other solutions, but this can be applied.

    Enum Class

    public enum EnumMenuInicial {  
    
        CADASTRAR(1), PESQUISAR(2), EXCLUIR(3);  
    
        public final int OPCAO;  
    
        private EnumMenuInicial(int opcaoEscolhida) {  
            this.OPCAO = opcaoEscolhida;  
        }  
    
        public static EnumMenuInicial getOpcao(int opcao){
            switch (opcao) {
                case 1:
                    return CADASTRAR;
               case 2:
                    return PESQUISAR;
                case 3:
                    return EXCLUIR;
                default:
                    throw new IllegalArgumentException();
            }
        }
    
    } 
    

    Validate Option

    private static boolean validarOpcao(int opcaoEscolhida) {
        try {
            EnumMenuInicial opcao = EnumMenuInicial.getOpcao(opcaoEscolhida);
            System.out.println("Opcao Escolhida: " + opcao);
            return true;
        } catch (IllegalArgumentException e) {
            System.err.println("Opcao Inválida: " + opcaoEscolhida);
            return false;
        }
    }
    
        
    19.05.2016 / 19:31