incomparable types: contrato[] and contrato

Iniciado por juligarc10, 13 Marzo 2019, 19:21 PM

0 Miembros y 1 Visitante están viendo este tema.

juligarc10

Hola amigos,

Tengo un problema, ya que estoy intentando mostrar una serie de objetos los cuales tienen su propio toString(), pero basándome en una condición de estos, dependiendo de si tienen un tipo determinado de un enumerado.
Al hacer la comparación con un if, me da error, y me muestra incomparable types: contrato[] and contrato. Aquí les dejo el código.

package bloque1_2;
import java.util.Scanner;
/**
*
* @author Admin
*/
public class Empresa {
    private Empleado[] empleados;
    private int numEmpleados;
   
    public Empresa(int maxEmpleados){
        empleados=new Empleado [maxEmpleados];
        numEmpleados=0;
                }
    @Override
    public String toString(){
        Scanner entrada=new Scanner(System.in);
        Empleado.Contrato contrato= Empleado.Contrato.FORMACION;
        for(int i=0;i<Empleado.Contrato.values().length;i++){
            System.out.println("Introduzca "+i+" si quiere mostrar los empleados de tipo "+ Empleado.Contrato.values()[i]);
        }
        int opcion=Integer.parseInt(entrada.nextLine());
        contrato=Empleado.Contrato.values()[opcion];
        for (int j=0;j<numEmpleados;j++){
            if(empleados[j].Contrato.values()==contrato){
               
           
            }
        }
    }
}


Este último if es el que me da error.

Gracias de antemano y un saludo.

rub'n

Postea los enum aquí a ver cómo los tienes.


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

juligarc10

Aquí los dejo amigo. Gracias.


package bloque1_2;

/**
*
* @author Admin
*/
public class Empleado {
   
    public static enum Contrato{INDEFINIDO, TEMPORAL, FORMACION, PRACTICAS};
    private int dni;
    private String nombre;
    private int salario;
    private Contrato contrato;
   
    public Empleado(int documento, String name, int dinero, Contrato contrato){
        dni=documento;
        nombre=name;
        salario=dinero;
        this.contrato=contrato;
    }
   
    public int getDni(){
        return dni;
    }
   
    public void setDni(int documento){
        dni=documento;
    }

    public String getNombre() {
        return nombre;
    }

    public int getSalario() {
        return salario;
    }

    public Contrato getContrato() {
        return contrato;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public void setSalario(int salario) {
        this.salario = salario;
    }

    public void setContrato(Contrato contrato) {
        this.contrato = contrato;
    }
   
    public String toString(){
        StringBuilder toret=new StringBuilder();
        toret.append("/nEl nombre del empleado es ").append(nombre)
                .append("/n El dni del empleado es ").append(dni)
                .append("/n Su salario es ").append(salario)
                .append("/n Su tipo de contrato es ").append(contrato);
        return toret.toString();
    }
   
}

juligarc10


rub'n

#4
Cuando llegue a la guarida, te ayudo dog, ese enum Contrato es mejor desarrollarlode otra manera, con un método estático dentro que consulte, si posee esa constante o no, logrando mayor legibilidad, que como lo estás haciendo , es un mero desastre  >:D


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

spcruzaley

Que tal Rub'n

Antes de nada, veo que tu variable numEmpleados la seteas a cero, imagino que solo es para pruebas o en alguna otra parte seteas algun valor, cierto? porque de otra manera nunca entrara a tu for.

Por otra parte, como bien comenta juligarc10, ese enum puede tener una mayor legibilidad si generas un metodo que se encargue de hacer algo mas especifico, igual por lo pronto podrias cambiar el for por esto:

Código (java) [Seleccionar]

        for (Empleado.Contrato ctr : Empleado.Contrato.values()) {
            if (ctr.equals(contrato)) {
                 //Do something
            }
        }



Saludos.
SPCruzaley

rub'n

spcruzaley tal cual dog, por ahí iba la cosa saludos.

Código (java) [Seleccionar]
public enum Contrato {

   INDEFINIDO("indefinido"),
   TEMPORAL("temporal"),
   FORMACION("formacion"),
   PRACTICAS("practicas");

   private final String value;

   Contrato(final String value) {
       this.value = value;
   }

   public String getValue() {
       return value;
   }

   public static Contrato getContrato(final String tipoContrato) {
       Contrato contrato = null;
       for(final Contrato tmp : Contrato.values()) {
           /**
            * a lowercase para coincidir con las constantes
            */
           if(tmp.getValue().equals(tipoContrato.toLowerCase())) {
               contrato = tmp;
               break;// se sale de las iteracioes con la primera coincidencia
           }
       }
       return contrato;
   }
}


Código (java) [Seleccionar]
/**
*
*/
public class Empresa {

   private static final Logger LOGGER = Logger.getLogger(Empresa.class.getSimpleName());
   private static final Scanner LEER = new Scanner(System.in);
   private String tipo;

   public Empresa() {
       try {
           LOGGER.info("Introduce Tipo de contrato :D");
           this.tipo = LEER.nextLine();
           final Contrato contrato = Contrato.getContrato(tipo);
           switch (contrato) {
               case TEMPORAL:
                   LOGGER.info("Temporal");
                   break;
               case FORMACION:
                   LOGGER.info("Formacion");
                   break;
               case PRACTICAS:
                   LOGGER.info("Practicas");
                   break;
               case INDEFINIDO:
                   LOGGER.info("Indefinido");
                   break;
           }
       } catch (final NullPointerException ex) {
           LOGGER.severe("No existe " + this.tipo);
       }

   }

   @Override
   public String toString() {
       return "Lo que quieres hacer aqui esta medio bull$shit, pero si quieres explicate mejor XD";
   }

   public static void main(String... blalb) {
       new Empresa();
   }
}


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

WHK

Tienes una excepción al intentar utilizar un índice inexistente:

for (int j=0;j<numEmpleados;j++){
           if(empleados[j].Contrato.values()==contrato){
               
           
           }
       }


Si la cantidad de empleados es 0, entonces no puedes ir a buscar el índice cero porque no existe. Hay que añadir un -1 a numEmpleados y hacer una condicional que diga que si la cantidad es mayor que cero entonces ir a hacer el recorrido del for.

También te recomiendo utilizar una lista en ves de un array ya que Java lo maneja de mejor manera, de hecho los repositorios Crud utilizan listas en ves de arrays, puedes llamar funciones para validar si estan vacias, obtener y buscar índices, etc.

Saludos.