elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  incomparable types: contrato[] and contrato
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: incomparable types: contrato[] and contrato  (Leído 3,293 veces)
juligarc10

Desconectado Desconectado

Mensajes: 47


Ver Perfil
incomparable types: contrato[] and contrato
« en: 13 Marzo 2019, 19:21 pm »

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.

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.


En línea

rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: incomparable types: contrato[] and contrato
« Respuesta #1 en: 13 Marzo 2019, 20:43 pm »

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


En línea



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 ki
juligarc10

Desconectado Desconectado

Mensajes: 47


Ver Perfil
Re: incomparable types: contrato[] and contrato
« Respuesta #2 en: 13 Marzo 2019, 20:45 pm »

Aquí los dejo amigo. Gracias.


Código:
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();
    }
   
}
En línea

juligarc10

Desconectado Desconectado

Mensajes: 47


Ver Perfil
Re: incomparable types: contrato[] and contrato
« Respuesta #3 en: 13 Marzo 2019, 20:46 pm »

Postea los enum aquí a ver cómo los tienes.
Hecho.
En línea

rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: incomparable types: contrato[] and contrato
« Respuesta #4 en: 13 Marzo 2019, 20:48 pm »

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
« Última modificación: 13 Marzo 2019, 20:50 pm por rub'n » En línea



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 ki
spcruzaley

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Re: incomparable types: contrato[] and contrato
« Respuesta #5 en: 13 Marzo 2019, 22:50 pm »

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
  1.        for (Empleado.Contrato ctr : Empleado.Contrato.values()) {
  2.            if (ctr.equals(contrato)) {
  3.                 //Do something
  4.            }
  5.        }
  6.  


Saludos.
SPCruzaley
En línea

rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: incomparable types: contrato[] and contrato
« Respuesta #6 en: 13 Marzo 2019, 23:39 pm »

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

Código
  1. public enum Contrato {
  2.  
  3.    INDEFINIDO("indefinido"),
  4.    TEMPORAL("temporal"),
  5.    FORMACION("formacion"),
  6.    PRACTICAS("practicas");
  7.  
  8.    private final String value;
  9.  
  10.    Contrato(final String value) {
  11.        this.value = value;
  12.    }
  13.  
  14.    public String getValue() {
  15.        return value;
  16.    }
  17.  
  18.    public static Contrato getContrato(final String tipoContrato) {
  19.        Contrato contrato = null;
  20.        for(final Contrato tmp : Contrato.values()) {
  21.            /**
  22.              * a lowercase para coincidir con las constantes
  23.              */
  24.            if(tmp.getValue().equals(tipoContrato.toLowerCase())) {
  25.                contrato = tmp;
  26.                break;// se sale de las iteracioes con la primera coincidencia
  27.            }
  28.        }
  29.        return contrato;
  30.    }
  31. }
  32.  

Código
  1. /**
  2.  *
  3.  */
  4. public class Empresa {
  5.  
  6.    private static final Logger LOGGER = Logger.getLogger(Empresa.class.getSimpleName());
  7.    private static final Scanner LEER = new Scanner(System.in);
  8.    private String tipo;
  9.  
  10.    public Empresa() {
  11.        try {
  12.            LOGGER.info("Introduce Tipo de contrato :D");
  13.            this.tipo = LEER.nextLine();
  14.            final Contrato contrato = Contrato.getContrato(tipo);
  15.            switch (contrato) {
  16.                case TEMPORAL:
  17.                    LOGGER.info("Temporal");
  18.                    break;
  19.                case FORMACION:
  20.                    LOGGER.info("Formacion");
  21.                    break;
  22.                case PRACTICAS:
  23.                    LOGGER.info("Practicas");
  24.                    break;
  25.                case INDEFINIDO:
  26.                    LOGGER.info("Indefinido");
  27.                    break;
  28.            }
  29.        } catch (final NullPointerException ex) {
  30.            LOGGER.severe("No existe " + this.tipo);
  31.        }
  32.  
  33.    }
  34.  
  35.    @Override
  36.    public String toString() {
  37.        return "Lo que quieres hacer aqui esta medio bull$shit, pero si quieres explicate mejor XD";
  38.    }
  39.  
  40.    public static void main(String... blalb) {
  41.        new Empresa();
  42.    }
  43. }
En línea



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 ki
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: incomparable types: contrato[] and contrato
« Respuesta #7 en: 14 Marzo 2019, 02:42 am »

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

Código:
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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
El Contrato.- Acepto « 1 2 »
Foro Libre
Ad0nis 10 4,277 Último mensaje 27 Julio 2011, 07:23 am
por flacc
Samsung podría firmar un contrato con el FBI
Noticias
Mister12 1 2,107 Último mensaje 21 Julio 2013, 01:20 am
por Jenag
Contrato de servicios de Microsoft
Foro Libre
satinado 2 1,411 Último mensaje 9 Agosto 2014, 20:40 pm
por satinado
Contrato
Ingeniería Inversa
Saskoso 1 2,261 Último mensaje 7 Marzo 2017, 14:10 pm
por Geovane
Microsoft gana el controvertido contrato por el Proyecto YEDI
Noticias
wolfbcn 0 1,205 Último mensaje 29 Octubre 2019, 01:17 am
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines